我有一个maven项目,我创建了两个包装。一个是tar.gz文件(对于某些目标)和一个可以使用RPM的linux目标的RPM。我为tar.gz文件使用maven-assembly-plugin。我使用maven-rpm-plugin进行RPM打包。
程序集插件允许指定一个真正的选项,它将替换目标文件中的任何maven属性。例如(来自我的pom):
<fileSet>
<directory>${basedir}/src/resources/</directory>
<outputDirectory>/</outputDirectory>
<filtered>true</filtered>
<includes>
<include>**/*.sh</include>
</includes>
<fileMode>0774</fileMode>
</fileSet>
我的.sh文件中有一个部分声明了java命令行的jar文件:
java -cp $ARGO_HOME/client/lib/${project.artifactId}-${project.version}.jar
当我使用上面定义的maven程序集插件时,$ {project.artifactId} - $ {project.version}会相应地进行翻译。
但是,当我为RPM构建使用相同的文件时,这些变量不会被替换。
有没有办法让RPM配置像Assembly配置一样工作?我找不到任何告诉我这是可能的文档。 BTW我的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,但这并不像我想的那么优雅。
有什么建议吗?
答案 0 :(得分:2)
使用postinstallScriptlet配置有相同的问题,这可以通过遵循使用maven-resources-plugin的方向来解决,这可以在这里看到:does an external script in rpm-maven-plugin have access to maven properties
所以你的配置应该是:
for 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上引用
答案 1 :(得分:0)
▪过滤:为
true
或false
,表示是否要为此资源启用过滤。 ...资源也可以使用POM中默认定义的属性(例如$ {project.version})