我正在努力应对maven依赖。在我添加自定义构建jar的项目中,maven依赖关系层次结构未得到解决。这有点令人困惑,因为依赖层次结构视图中很好地显示了其他外部提供的依赖项(如org.json,reasteasy-jaxrs)的所有依赖项。我正在使用Eclipse EE IDE for Web Developers with maven plugin。
项目结构:该项目是一个由使用相同项目支持模块的多个服务组成的平台。此外,项目支持也将用于外部项目(此处为项目 - 消费者)。
project-parent.pom的摘录
<modules>
<module>../project-support</module>
<module>../project-serviceA</module>
<module>../project-serviceB</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tomcat.version>7.0.50</tomcat.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.6.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
project-support.pom的摘录
<parent>
<groupId>com.somecompany.project</groupId>
<artifactId>project-parent</artifactId>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../project-parent</relativePath>
</parent>
<artifactId>project-support</artifactId>
<name>projectsupport</name>
<dependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
</dependencies>
项目服务-a.pom
的摘录<parent>
<groupId>com.somecompany.project</groupId>
<artifactId>project-serviceA</artifactId>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../project-parent</relativePath>
</parent>
<artifactId>project-service-a</artifactId>
<name>projectsupport</name>
<dependencies>
<dependency>
<groupId>com.somecompany.project</groupId>
<artifactId>project-support</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
因此,在查看project-serviceA依赖层次结构(以及有效pom)时,不包括项目支持所需的依赖项,这会导致代码编译错误。此外,项目支持用于项目 - 父级范围之外的项目。
所以我的问题:为什么maven没有解析项目支持的依赖树并将它们添加到有效的pom中?
提前致谢。
答案 0 :(得分:1)
您已在父级的依赖关系管理部分中将依赖项的范围设置为提供的。根据{{3}},依赖范围用于限制依赖项的传递性。
以上链接的介绍还包括一个表格,用于声明哪些范围在传递性游戏中起作用,哪些不起作用。 提供的范围不是传递范围的一部分。
因此,解决方案是不在依赖关系管理中声明任何范围,而是在依赖关系使用中声明合理的范围。