【发布时间】:2011-09-02 06:51:43
【问题描述】:
我是 Maven 新手,正在建立我的第一个 Maven 项目。我还以一些 pom 的形式创建了一些 maven 资产,这些资产也可以从任何未来的项目中继承或用作依赖项。我想将依赖项组合在一起,并能够根据需要有选择地将它们添加到项目中。
我阅读了关于 pom 最佳实践的 this article。我喜欢将相关的依赖项组合到 pom 中,然后根据需要将 pom 作为依赖项添加到项目中的想法。这种方法非常适合编译作用域依赖项。但是,对于提供的作用域,它会失败,因为作为传递依赖,它们会被省略。
这是我的意思的一个例子:假设我将我的项目的 Web 依赖项组合到一个 web-deps pom.xml 中。其中包括 compile 范围的 Spring 框架依赖项以及 provided 范围的 javaee 之一:
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>mvn-web-deps</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
然后我将此 pom 作为依赖项添加到另一个项目中:
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>project-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependency>
<groupId>com.xyz</groupId>
<artifactId>mvn-web-deps</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
</dependency>
mvn-web-deps 中的依赖关系现在变为传递。由于上面的依赖引用是compile 作用域的,所以provided 传递依赖被省略了。
我想避免将它们添加到父级的dependency 部分,因为只能有一个父级,并且项目可能只需要其中一些依赖组,而不是全部。我或许可以将它们添加到 dependencyManagement 部分,但随后我将不得不在每个子项目中重新声明每个依赖项(无版本)。
在避免上述问题的同时,对依赖项进行分组的正确/更好的方法是什么?
【问题讨论】:
-
这对即使是编译范围也不起作用
标签: java maven-2 dependencies