2010-10-21 55 views
1

我试图使用多模块maven项目执行发布。我的目标是修改所有poms的版本,并在SCM中创建一个标签,这就是我使用maven release插件的原因。带配置文件依赖子模块的Maven发布插件

该项目,我已经简化为一个层次:

example/ 
    module1/ 
    module2/ 
     module-jni-linux/ 
     module-jni-macosx/ 

example pom.xml中包含这样的模块:

<modules> 
    <module>module1</module> 
    <module>module2</module> 
</modules> 

module2 pom.xml中包含的模块取决于由操作系统类型确定的配置文件:

<profiles> 
<!-- profile for linux --> 
<profile> 
    <id>linux</id> 
    <activation> 
    <os> 
     <name>linux</name> 
    </os> 
    </activation> 
    <modules> 
    <module>module-jni-linux</module> 
    </modules> 
</profile> 
<!-- profile for mac os -->  
<profile> 
    <id>macosx</id> 
    <activation> 
    <os> 
     <name>mac os x</name> 
    </os> 
    </activation> 
    <modules> 
    <module>module-jni-macosx</module> 
    </modules> 
</profile> 

最后,每个module-jni-*都使用native-maven插件来编译一些C/C++源代码并生成一个共享库。


问题:

当我尝试mvn release:prepare -DdryRun=true在一个Mac OS X中,我认识到,module-jni-linux不会被释放过程中考虑。这意味着在所有模块都通过1.0.0/1.0.1-SNAPSHOT版本时,module-jni-linux未被修改。我在做release:prepare时想要的是,即使其配置文件尚未激活,所有子模块也会更新。

我试图同时激活两个配置文件mvn -P linux,macosx ...,但module-jni-linux不会建立在mac下(反之亦然)。

如何执行更新两个子模块版本的版本?

回答

1

好,我找到了一种方法来做到这一点:

为了创建一个发布,行家释放小插件运行提交到SCM前cleanverify目标。 verify目标试图编译每个模块。

我现在要做的就是配置插件所以它只能运行在verify目标。但是由于verify无论如何都很重要,所以我在不同环境下进行发布之前手动运行它。我的发布程序如下:

  1. 在Mac和Linux环境下运行mvn clean verify。为此,我配置了一个多节点哈德森作业。
  2. 运行mvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=clean,这会激活两个配置文件,但跳过编译
  3. 检查干运行的结果是令人满意的
  4. 做第2步-DdryRun=false
+0

我遇到正是这个问题。你是否设法以另一种方式解决它,或者这是唯一的解决方法。谢谢。 – Eugen 2011-07-01 22:16:24