1

在我的 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 文件?

4

1 回答 1

1

你的假设是正确的。会将您的程序集项目的maven-assembly-plugin所有依赖项重命名为以下指定的格式outputFileNameMapping

设置此程序集中包含的所有依赖项的映射模式。默认值为:${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}

该文档包含您可以在此属性中指定的所有值

outputFileNameMapping 参数中可以使用哪些属性。

您可以使用 :

  • 构建中可用的所有系统或 Maven 属性,语法为${myProperty}.
  • 所有环境变量,${env.XXX}其中 whereXXX是环境变量。
  • 特殊${dashClassifier?}属性(见上文)。
  • 所有工件属性(来自Artifact类),如:
    • ${artifact.groupId}: 工件组 ID。
    • ${artifact.artifactId}: 工件 artifactId。
    • ${artifact.version}:工件分类器。
    • ${artifact.baseVersion}:工件基础版本(对于 SNAPSHOT,它将始终是 -SNAPSHOT 而不是它的时间戳,即使您没有自己构建它也是如此)。
    • ${artifact.classifier}:工件分类器。
    • ${artifact.scope}: 工件范围。
    • ...

您可以${module.XXXXX}在将它用于您的项目模块工​​件时使用它。

文档中似乎缺少它,但从 2.2 版开始,您还可以使用该${artifact.properties.*}属性,如 JIRA MASSEMBLY-498中所述。这将引用您在<properties>元素内的此工件中设置的自定义属性。

因此,例如,您可以:

<outputFileNameMapping>${artifact.artifactId}-${artifact.version}.noarch.rpm</outputFileNameMapping>

请注意,插件始终根据该模式重命名文件。没有选项可以跳过重命名。

于 2016-02-25T12:02:26.170 回答