自定义自定义jar的依赖关系层次结构

时间:2014-07-06 10:48:41

标签: java eclipse maven dependencies

我正在努力应对maven依赖。在我添加自定义构建jar的项目中,maven依赖关系层次结构未得到解决。这有点令人困惑,因为依赖层次结构视图中很好地显示了其他外部提供的依赖项(如org.json,reasteasy-jaxrs)的所有依赖项。我正在使用Eclipse EE IDE for Web Developers with maven plugin。

项目结构:该项目是一个由使用相同项目支持模块的多个服务组成的平台。此外,项目支持也将用于外部项目(此处为项目 - 消费者)。

  • project-parent(pom)
    • 项目支持(jar)
    • project-service-a(战争)
    • project-service-b(jar)
  • 项目消费者(战争)
    • 项目支持(jar)

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中?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您已在父级的依赖关系管理部分中将依赖项的范围设置为提供的。根据{{​​3}},依赖范围用于限制依赖项的传递性

以上链接的介绍还包括一个表格,用于声明哪些范围在传递性游戏中起作用,哪些不起作用。 提供的范围不是传递范围的一部分。

因此,解决方案是不在依赖关系管理中声明任何范围,而是在依赖关系使用中声明合理的范围。