我应该如何让Maven同时为所有支持的体系结构部署工件?

时间:2011-06-15 23:32:33

标签: maven maven-assembly-plugin multiplatform

我有一个问题,可能与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插件的内自动构建一个清理构建其他

通常,我们从多模块项目的根目录mvn release:prepare release:perform来处理将所有内容部署到内部Nexus。但是,在这种情况下,我们必须选择一个 - 运行旧库配置文件,或运行不使用并获取新的配置文件。我需要发布插件来部署两个。这不可能吗?我必须想象,我们不是第一个希望让我们的自动化构建能够为不同平台提供支持的人....

1 个答案:

答案 0 :(得分:3)

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

<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>

希望这有帮助。