我们的组织有一个命名 rpm 的约定。通常,rpm 的基本名称比 Maven 项目短。还有一个关于如何命名发布的约定。所以我们想要一个像这样的名字
${shortname}-${project.version}-${release}.noarch.rpm
.
我想使用 rpm-maven-plugin 而不是旧的 nmake 技术构建这样的 rpm。
这可以使用插件的参数轻松完成。在目标目录中生成的 rpm 具有所需的名称。
然而,当mvn install
将此 rpm 安装到 maven 存储库中,它坚持以“maven 方式”存储它:${project.artifactId}-${project.version}.rpm
我希望使用最初在 package.xml 上创建的名称将 rpm 存储在标准 maven 存储库目录中。
我怎样才能做到这一点?
更新:
我尝试使用 maven-install-plugin(安装文件目标)但没有得到我想要的结果。但这部分是因为我没有正确调用它。它没有被调用。如果您定义安装文件目标,则它必须明确绑定(bind)到安装阶段。这样做,即添加一个 <phase>install</phase>
配置至少调用了我想要的安装的执行,但它仍然不允许我根据需要命名 rpm。
最佳答案
根据 Apache Maven 项目的提交者 Karl Heinz Marbaise 所说,what I am trying to do is impossible, and should not be attempted.
但是,我需要我需要的东西,并且找到了一个折衷方案,可以满足我的大部分需求。我唯一必须牺牲的是假设存储库 RPM 必须与项目的其余部分位于相同的存储库目录中。这是一个很小的牺牲。一旦我这样做了,我就可以将 rpm 存储在 Maven 存储库的一个目录中,按照我想要的方式命名,以短名称命名。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>install-rpm</id>
<goals>
<goal>install-file</goal>
</goals>
<phase>install</phase>
<configuration>
<file>${project.build.directory}/rpm/${rpm.name}/RPMS/noarch/${rpm.name}-${project.version}-${rpm.release}.noarch.rpm</file>
<groupId>${project.groupId}.rpms</groupId>
<artifactId>${rpm.name}</artifactId>
<version>${project.version}-${rpm.release}</version>
<classifier>noarch</classifier>
<packaging>rpm</packaging>
</configuration>
</execution>
</executions>
</plugin>
使用 ${project.groupId}.rpms
的 groupId 而不仅仅是 ${project.groupId}
允许以这种方式构建的所有 rpm 都存在于主存储库的分支,这在我们的情况下很有用。
使用 ${project.version}-${rpm.release}
而不仅仅是 ${project.version}
允许将发布合并到名字。
noarch
分类器也将其纳入名称。
关于maven-3 - rpm-maven-plugin 如何控制 m2 存储库中存储的 rpm 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34139544/