2015-08-27 11 views
0

我的项目有多个罐子和战争的结构如下:如何在Maven中继承Webapps的Java-EE API?

root (pom) 
+--core (jar) 
+--webapp (jar) 
+--childgroup (pom) 
    +--actual-web-application (war) 
    +--some-library (jar) 
+--othergroup (pom) 
    +--another-web-application (war)  

当实际网络应用依赖于Web应用程序依赖于核心。理想情况下,我想仅在webapp模块中指定Java EE依赖项,并让实际Web应用程序继承它。但是因为它是提供的依赖项,所以这不起作用,我必须在每个Web应用程序中手动添加提供的东西(如Java EE,jax-rs等)的依赖项。

有没有什么办法,以dependencyManagement为例,让实际的web应用程序从webapp继承javaee-api?

我已经试过,在Web应用的pom.xml:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

而且在实际网络应用的pom.xml:

<dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <scope>provided</scope> 
    </dependency> 

但是,它符合有关的版本,所以它似乎它仍然没有从webapp的pom.xml中继承依赖。

+0

'提供'是不传递的。 – khmarbaise

+0

我知道,但我想知道是否有解决此问题的方法。 – Davio

+1

简单的回答没有。提供的范围有意义。唯一的“解决方法”不是使用'provided',这是完全错误的。 – khmarbaise

回答

0

<scope>provided</scope>到dependencyManagement也

0

提供的相关性继承,就像任何其他的依赖会。

父的pom.xml:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

孩子的pom.xml:

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
    </dependency> 
</dependencies> 

与孩子的依赖关系树:

--- maven-dependency-plugin:2.8:tree (default-cli) @ child --- 
com.iei.web:child:war:1.0-SNAPSHOT 
\- javax:javaee-api:jar:7.0:provided 
    \- com.sun.mail:javax.mail:jar:1.5.0:provided 
     \- javax.activation:activation:jar:1.1:provided 

如果你正试图避免明确定义的依赖在孩子中,那么你当然必须将其从父母中的dependencyManagement中移出并假设你想让每个子模块继承它,并使其成为直接依赖关系。

Dependency Management

+0

我想我的问题是,依赖项是在兄弟项目中,而不是在直接父项的dependencyManagement中,是正确的吗? – Davio

+0

啊,是的,我误解了你的层次结构的一部分。如果实际web应用程序明确依赖webapp并通过传递来实现,则兄弟依赖关系只会被带过来。 – whitlaaa