2012-08-13 82 views
1

我有多模块maven项目,主项目依赖于子模块。子模块的每个依赖关系都由以下版本定义:${pom.version}。我使用Maven发布插件。如果我尝试准备发布,我有关于子模块版本丢失的错误。多模块应用程序maven

例子:

主要POM是1.0版本,我尝试将其释放。 Maven将每个子模块构建到版本1.1,然后尝试构建父代,然后崩溃。因为找不到sub-module-1.1

我不知道如何告诉maven构建,并立即安装到local-repo构建的每个子模块。我使用maven2。

我POM:

<modelVersion>4.0.0</modelVersion> 

<groupId>com.voncuver</groupId> 
<artifactId>voncuver</artifactId> 
<packaging>pom</packaging> 
<version>1.1-SNAPSHOT</version> 
<name>multimodule</name> 

<modules> 
    <module>mod1</module> 
    <module>mod2</module> 
</modules> 

(...) 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <artifactId>mod1</artifactId> 
      <groupId>com.voncuver</groupId> 
      <version>${pom.version}</version> 
     </dependency> 
     <dependency> 
      <artifactId>mod2</artifactId> 
      <groupId>com.voncuver</groupId> 
      <version>${pom.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
(...) 
+0

您是否明确将每个子模块的版本设置为$ {pom.version}?版本属性继承自父... – 2012-08-13 14:41:04

+3

首先你可以发布你的pom的(摘录是好的)此外不要使用pom.version更好的是project.version – khmarbaise 2012-08-13 14:43:13

+1

发布插件会自动更新反应器内的依赖版本,所以实际上没有必要引用$ {project.version}也请记住,@khmarbaise表示$ {pom.version}不赞成使用$ {project.version} – 2012-08-14 08:10:05

回答

1

你或许应该张贴多一点你的项目结构,但通常一个多模块项目如下:

project 
    mod1 
    mod2 
    mod3 
    pom.xml 

主要的pom.xml会有“ pom“包装类型,并且在其中有一个部分用于构建其他部分:

<packaging>pom</packaging> 
<modules> 
    <module>mod1</module> 
    <module>mod2</module> 
    <module>mod3</module> 
</modules> 

N,最可靠的方法,以确保一切建立正确的执行:

MVN全新安装

没有“安装”,这是极有可能的事情可能不会在Maven反应堆被发现,尤其取决于你使用的maven版本(以及其他一些因素)。

+0

OP有'maven问题-release-plugin',它比运行'mvn install'复杂得多。我不确定这个答案会有多大帮助,因为这个问题不太清楚。目前,我将downvote,对不起... – maba 2012-08-13 13:47:41

+0

@maba我的观点是释放插件或没有,没有足够的信息关于他的项目结构任何人给予任何帮助。我只是提出了结构应该是什么样子,以防它不是相对“标准”的。 – Matt 2012-08-13 17:11:26

+0

运行'mvn release:perform'将执行预定义的Maven阶段'mvn deploy',它将自动执行'mvn install'。 – yorkw 2012-08-13 21:48:42