3

我有一个 Maven 项目,我在其中创建了两个包装。一个是 tar.gz 文件(对于某些目标)和一个 RPM,用于可以使用 RPM 的 linux 目标。我将 maven-assembly-plugin 用于 tar.gz 文件。我使用 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 配置一样工作?我找不到任何文档告诉我这是可能的。顺便说一句,我的 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,但这并不像我想要的那样优雅。

有什么建议么?

4

2 回答 2

2

使用 postinstallScriptlet 配置时遇到了同样的问题,这是通过遵循使用 maven-resources-plugin 的方向解决的,可以在这里看到:does an external script in rpm-maven-plugin have access to maven properties

所以你的配置应该是:

对于 Maven 资源插件:

<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 上引用

于 2015-09-01T12:08:30.913 回答
0

看看POM 参考,资源

过滤:truefalse,表示是否要为此资源启用过滤。...资源也可以使用在 POM 中默认定义的属性(例如 ${project.version})

于 2015-07-17T19:49:16.570 回答