【问题标题】:Using Hudson and Maven to release an application for multiple platforms使用 Hudson 和 Maven 发布适用于多个平台的应用程序
【发布时间】:2011-01-07 20:08:12
【问题描述】:

这个问题实际上并不是关于最佳实践或架构,而是关于如何专门配置 Hudson 和 Maven 来完成我想要的。我有点迷茫。

我有一个使用 SWT 的 Java 应用程序,我需要为不同的平台构建副本。目前,我只需要 Linux i386 和 Linux amd64,但在未来,我还需要添加 Windows x86/x64,所以我想确保第一次将其设置“正确”。

我的应用程序具有项目 pom.xml 中列出的所有依赖项和其他信息,包括根据操作系统、架构和系列获取的不同 SWT jar。

我的问题是,如何以最少的配置重复为 linux i386 和 linux amd64 构建版本?现在我正在做以下事情:

  • 项目在 pom.xml 中指定所有依赖项,并且此项目设置为在 Hudson 中构建并将生成的 .jar 部署到 Nexus
  • Builder-linux-i386 在 Project 之后运行,并为 i386 指定任何 JNI 文件,并使用 de.tarent maven-pkg-plugin 从 Nexus 中获取项目 jar 并将其与所有依赖项一起组装到单个“胖”jar文件,然后进入 .deb 文件进行安装。
  • Builder-linux-amd64 的作用相同,但针对 amd64 文件

我一直在尝试通过将-P profilename 添加到他们的 Hudson 项目中来指定要在 Builder 项目中使用哪些依赖项,其中 profilename 是在 Project pom.xml 中命名的配置文件。 Maven 似乎不喜欢这个并打印出它没有激活该配置文件。它只使用 Project 的 pom 中的默认配置文件。

设置的正确方法是什么?我想在我的项目 pom 中指定我的所有依赖项,并有一个 Hudson 项目编译该项目的 jar 并将其部署到 Nexus,然后 独立 项目获取该 jar 并组装它以及用于发布的特定于平台的文件。我不想重复构建整个原始项目,也不想拥有大量重复的配置信息或复制粘贴的 pom。

我让它适用于 unix-amd64 只是因为那是构建机器,所以 Maven 以该架构为目标。另外,我觉得设置没有想象中的那么干净。建议?

【问题讨论】:

    标签: java hudson maven


    【解决方案1】:

    您有语法错误。它必须是-Pprofilename。这种方式对我有用。

    编辑

    由于读取了配置文件。您的配置文件配置中可能存在语法错误。我在一个项目中找到了一个配置文件,我将其集成到我们的 CI 环境中。它定义了一些依赖关系,它可能会对你有所帮助。

        <profile>
            <id>junit</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
    
                        <configuration>
                            <skip>false</skip>
                            <testNGArtifactName>none:none</testNGArtifactName>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
    
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
    
        </profile>
    

    【讨论】:

    • 没关系。 Maven 注意到 -P 标志很好,并打印出它没有激活配置文件。
    • 没有激活是什么原因?
    • 尝试使用-e -X 再次运行构建,这将产生更多输出。
    【解决方案2】:

    配置文件应该以您所描述的方式工作(您可以发布有关此问题的其他问题)。

    但至少(至少对于 Web 应用程序)还有另一种方法:尝试使用分类器而不是配置文件来为不同的环境构建。 -- 你可以看看这个博客:http://blog.jayway.com/2010/01/21/one-artifact-with-multiple-configurations-in-maven/

    此解决方案的目的是,您能够一次为所有环境构建(如果需要(由配置文件控制))。

    【讨论】:

      【解决方案3】:

      构建器项目看不到主项目的配置文件,因为它实际上不是父项目。我无法在构建器项目中将其定义为 a,因为我的项目不是这样设置的,而且我正在使用诸如 ${SVN_REVISION} 之类的变量进行构建,而 maven 不喜欢。

      我已经放弃,而是将配置文件复制粘贴到“构建器”项目中。这不是最漂亮的,但现在可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 2016-06-27
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        相关资源
        最近更新 更多