Используя 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})