使用Hudson和Maven为多个平台发布应用程序

时间:2011-01-07 20:08:12

标签: java hudson maven

这个问题并不是关于最佳实践或架构,而是关于如何专门配置Hudson和Maven以实现我想要的。我有点失落。

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

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

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

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

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

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

我认为它只适用于unix-amd64,因为这就是构建机器所针对的,因此Maven以该架构为目标。此外,我觉得设置不是那么干净。建议?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

个人资料应该按照你的方式工作(你可以发布一个关于此问题的其他问题)。

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

此解决方案的目的是,您可以同时为所有环境构建(如果您需要(由配置文件控制))。

答案 2 :(得分:0)

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

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