3

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

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

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

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

4

1 回答 1

3

您可以安装具有不同类型/分类器的其他工件。使用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>

希望这可以帮助。

于 2011-06-16T06:11:29.743 回答