在我的maven项目中,我需要(相当大量的)RPM。为了方便部署,我想将所有RPM组合成一个存档(.tar.gz)。装配在一个单独的模块中运行,该模块取决于所有RPM模块。
为此,我有以下assembly.xml
:
<?xml version="1.0"?>
<assembly>
<id>myproject-rpm-package</id>
<formats>
<format>tar.gz</format>
</formats>
<baseDirectory>${project.parent.parent.name}-${project.version}-rpms</baseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<!-- Include only the RPMs -->
<include>*:rpm</include>
</includes>
<outputDirectory>/</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
这很有效,但它重命名我的所有RPMS,遵循以下格式:<projectname>-<version>.rpm
。丢失RPM命名约定中的有用属性:<rpm name>-<version>-<release>.noarch.rpm
。 RPMS仍然可以正常工作。
我怀疑这是来自maven汇编属性outputFileNameMapping。
我的假设是否正确?如果是这样,我怎么能阻止程序集插件重命名我的RPM文件?
答案 0 :(得分:1)
你的假设是正确的。 maven-assembly-plugin
会将您的程序集项目的所有依赖项重命名为outputFileNameMapping
指定的格式:
设置此程序集中包含的所有依赖项的映射模式。 默认值为:
${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}
。
该文档包含您可以在此属性中指定的all values:
可以在outputFileNameMapping参数中使用哪些属性。
您可以使用:
- 您的构建中可用的所有系统或maven属性,语法为
${myProperty}
。- 所有环境变量
${env.XXX}
,其中XXX
是环境变量。- 特殊
${dashClassifier?}
属性(见上文)。- 所有工件属性(来自
Artifact
类),如:
${artifact.groupId}
:工件groupId。${artifact.artifactId}
:神器artifactId。${artifact.version}
:工件分类器。${artifact.baseVersion}
:神器基础版本(对于SNAPSHOT,它总是-SNAPSHOT而不是它的时间戳,即使你没有自己构建它)。${artifact.classifier}
:工件分类器。${artifact.scope}
:工件范围。- ...
将
${module.XXXXX}
用于项目模块工件时,可以使用${artifact.properties.*}
。
文档中似乎缺少它,但从2.2版开始,您还可以使用<properties>
属性,如JIRA MASSEMBLY-498中所述。这将引用您在<outputFileNameMapping>${artifact.artifactId}-${artifact.version}.noarch.rpm</outputFileNameMapping>
元素内的此工件中设置的自定义属性。
所以,例如,你可以:
{{1}}
请注意,插件将始终根据该模式重命名文件。没有选项可以跳过重命名。