这个问题并不是关于最佳实践或架构,而是关于如何专门配置Hudson和Maven以实现我想要的。我有点失落。
我有一个使用SWT的Java应用程序,我需要为不同的平台构建副本。目前,我需要的只是Linux i386和Linux amd64,但是在将来,我还需要添加Windows x86 / x64,所以我想确保我第一次“正确”设置它。
我的应用程序包含Project pom.xml中列出的所有依赖项和其他信息,包括根据操作系统,拱门和系列获取的不同SWT jar。
我的问题是,如何使用最少量的配置复制为linux i386和linux amd64构建?现在我正在做以下事情:
我一直在尝试通过将-P profilename
添加到他们的Hudson项目来指定在Builder项目中使用哪些依赖项,其中profilename
是在项目pom中命名的概要文件。 Maven似乎不喜欢这样,并打印出它没有激活该配置文件。它只使用Project的pom中的默认配置文件。
设置此方法的正确方法是什么?我希望在我的Project pom中指定所有依赖项,并且有一个Hudson项目,它为该项目编译jar并将其部署到Nexus,然后是独立的项目,它们抓住那个jar并组装它以及特定于平台的文件以供发布。我不想重复构建整个原始项目,我不希望有大量重复的配置信息或复制粘贴的poms。
我认为它只适用于unix-amd64,因为这就是构建机器所针对的,因此Maven以该架构为目标。此外,我觉得设置不是那么干净。建议?
答案 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不喜欢这样的变量。
我放弃了,而是将配置文件复制粘贴到“构建器”项目中。这不是最漂亮但现在可行。