【问题标题】:How should I get Maven to deploy artifacts for all supported architectures at the same time?我应该如何让 Maven 同时为所有支持的架构部署工件?
【发布时间】:2011-06-15 23:32:33
【问题描述】:

我有一个可能与this 非常相似的问题。我需要解决我想象中的一个非常常见的问题——如何配置 Maven 以在同一个工件上产生多个变体——但我还没有找到一个好的解决方案。

我有一个多模块项目,最终导致assembly 插件生成一个工件。但是,部分程序集包括最近发生了重大变化的库,结果项目的一些使用者需要库版本 N,而其他人需要版本 N+1。理想情况下,我们会自动生成多个工件,例如theproject-1.2.3.thelib-1.0.tar.gztheproject-1.2.3.thelib-1.1.tar.gz 等(这是我们项目的 1.2.3 版本,针对库版本 1.0 或 1.1 运行)。

现在,我有一堆默认属性,它们针对最新版本的相关库构建,以及针对旧版本构建的配置文件。我可以通过这种方式部署一种或另一种,但不能在一个构建中同时部署这两种方式。这是与上述问题不同的关键问题:我无法自动化 release 插件的 build-one-clean-build-the-other inside

通常,我们会从多模块项目的根目录中mvn release:prepare release:perform 负责将所有内容部署到我们的内部 Nexus。但是,在这种情况下,我们必须选择一个——要么运行旧的库配置文件,要么不运行并获取新的配置文件。我需要发布插件来部署both。这是不可能的吗?我不得不想象我们不是第一个希望我们的自动化构建生成对不同平台的支持的人......

【问题讨论】:

    标签: maven maven-assembly-plugin multiplatform


    【解决方案1】:

    您可以安装具有不同类型/分类器的其他工件。使用build-helper-maven-pluginattach-artifact 目标来实现此目的。这是一个小例子 - 我们正在将产品的 Windows 和 Unix 安装程序部署为 windows/exe 和 unix/sh 文件。这些文件将安装到本地 repo 并部署到分发管理。

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>install-installation</id>
                <phase>install</phase>
                <goals>
                    <goal>attach-artifact</goal>
                </goals>
                <configuration>
                    <artifacts>
                        <artifact>
                            <file>${basedir}/target/${project.artifactId}-${project.version}-windows.exe</file>
                            <classifier>windows</classifier>
                            <type>exe</type>
                        </artifact>
                        <artifact>
                            <file>${basedir}/target/${project.artifactId}-${project.version}-unix.sh</file>
                            <classifier>unix</classifier>
                            <type>sh</type>
                        </artifact>
                    </artifacts>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    希望这会有所帮助。

    【讨论】:

    • 我认为这是朝着正确方向迈出的一大步,谢谢!我在这里唯一缺少的是如何告诉它“对于分类器foo,使用库版本1.0,但对于分类器bar,使用版本1.1”。我会继续阅读......
    • 供参考/未来的信息寻求者,这个答案的“附加工件”部分真的很强大。 Maven 有一个“主要工件”的概念,其中生命周期通常会生成单个输出对象。当您附加次要工件时,更下游的目标能够记录并对其采取行动,例如让deploy 传输其他文件。
    • 这有点工作。它不断重命名artficats。我有一个生成的 linux 安装文件,我将文件类型保留为空,因此它会将 .jar 添加到它的末尾。它还通过添加分类器重命名该死的文件。你为什么要重命名文件?这是该死的文件,使用它! Maven 真的让我很生气。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2013-10-11
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多