1

我正在尝试使用多模块 Maven 项目执行发布。我的目标是修改所有 pom 的版本,并在 SCM 中创建一个标签,这就是我使用 maven 发布插件的原因。

这个项目有一个层次结构,我将其简化为:

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

pom.xmlexample包含它的模块,如下所示:

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

并且 pom.xmlmodule2包含依赖于由操作系统类型确定的配置文件的模块:

<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-plugin 编译一些 C/C++ 源代码并生成一个共享库。


问题:

当我mvn release:prepare -DdryRun=true在 Mac OS X 机器中尝试 a 时,我意识到module-jni-linux发布过程没有考虑到 。这意味着虽然所有模块都传递到 1.0.0/1.0.1-SNAPSHOT 版本,module-jni-linux但不会被修改。我想要的release:prepare是,即使其配置文件尚未激活,所有子模块也会更新。

我尝试使用 激活这两个配置文件mvn -P linux,macosx ...,但module-jni-linux不会在 mac 下构建(反之亦然)。

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

4

2 回答 2

1

好的,我找到了一种方法:

为了创建发布,maven-release-plugin在提交到 SCM 之前运行clean和目标。目标尝试编译每个模块verifyverify

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

  1. mvn clean verify在 Mac 和 Linux 环境中运行。为此,我配置了一个多节点的 hudson 作业。
  2. 运行mvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=clean,这将激活两个配置文件但跳过编译
  3. 检查试运行结果是否令人满意
  4. 做第2步-DdryRun=false
于 2010-10-21T15:01:31.330 回答
1

对于父 pom.xml 中的 Maven 发布插件配置,您是否尝试过使用<arguments>指定要启用的配置文件的参数?

你可以在这里阅读更多关于它的信息:http ://maven.apache.org/plugins/maven-release-plugin/prepare-mojo.html

基本上,它允许您将其他参数传递给 Maven 调用,包括配置文件,例如 -P linux,macosx。

于 2010-10-21T14:21:22.957 回答