Используя maven-rpm-plugin, как заменить текст в файлах, похожих на плагин сборки

У меня есть проект Maven, в котором я создаю две упаковки. Одним из них является файл tar.gz (для некоторых целей) и RPM для целей linux, которые могут использовать RPM. Я использую maven-assembly-plugin для файла tar.gz. Я использую maven-rpm-plugin для упаковки RPM.

Плагин сборки позволяет указать истинную опцию, которая заменит любые свойства maven в целевых файлах. Например (из моего пом):

<fileSet>
    <directory>${basedir}/src/resources/</directory>
    <outputDirectory>/</outputDirectory>
    <filtered>true</filtered>
    <includes>
        <include>**/*.sh</include>
    </includes>
    <fileMode>0774</fileMode>
</fileSet>

В моем файле.sh есть раздел, в котором объявлен файл jar для командной строки java:

java -cp $ARGO_HOME/client/lib/${project.artifactId}-${project.version}.jar

Когда я использую подключаемый модуль maven, как определено выше, ${project.artifactId}-${project.version} переводится соответствующим образом.

Однако, когда я использую те же файлы для моей сборки RPM, эти переменные не заменяются.

Есть ли способ заставить конфигурацию RPM работать как конфигурация сборки? Я не могу найти никаких документов, которые говорят мне, что это возможно. Кстати, мой RPM-конфиг выглядит так:

         <mapping>
          <directory>/opt/argo/client/bin</directory>
          <directoryIncluded>false</directoryIncluded>
          <username>argo</username>
          <groupname>argogroup</groupname>
          <filemode>744</filemode>
          <sources>
            <source>
              <location>src/resources/client/bin</location>
              <includes>
                <include>*.sh</include>
              </includes>
            </source>
          </sources>
        </mapping>

То, что я хотел бы, чтобы просто поставить в соответствие в картировании и назвать это день. Есть ли способ сделать это с помощью maven-rpm-plugin?

Я думаю об использовании maven-replacer-plugin, но это не так элегантно, как хотелось бы.

Какие-либо предложения?

2 ответа

Решение

Была такая же проблема с использованием конфигурации postinstallScriptlet, которая была решена путем следования ориентации на использование maven-resources-plugin, что можно увидеть здесь: имеет ли внешний скрипт в rpm-maven-plugin доступ к свойствам maven

Итак, ваша конфигурация должна быть:

для maven-resources-plugin:

<configuration>
    <outputDirectory>${basedir}/target/classes/scripts</outputDirectory>
    <resources>          
        <resource>
          <directory>src/resources/client/bin</directory>
          <filtering>true</filtering>
        </resource>
    </resources>              
</configuration>

для rpm-maven-plugin:

    <mapping>
      <directory>/opt/argo/client/bin</directory>
      <directoryIncluded>false</directoryIncluded>
      <username>argo</username>
      <groupname>argogroup</groupname>
      <filemode>744</filemode>
      <sources>
        <source>
          <location>${basedir}/target/classes/scripts</location>
          <includes>
            <include>*.sh</include>
          </includes>
        </source>
      </sources>
    </mapping>

Таким образом, maven-resources-plugin отфильтрует ваши свойства maven в скопированный файл, который будет указан в rpm-maven-plugin

Взгляните на POM Reference, Ресурсы:

фильтрация: есть true или же false , обозначающий, что фильтрация должна быть включена для этого ресурса. ... ресурсы также могут использовать свойства, которые по умолчанию определены в POM (например, ${project.version})

Другие вопросы по тегам