Java 自动解析自定义jar的依赖关系层次结构

Java 自动解析自定义jar的依赖关系层次结构,java,eclipse,maven,dependencies,Java,Eclipse,Maven,Dependencies,我正在与maven依赖性作斗争。maven依赖层次结构在我添加自定义构建jar的项目中没有得到解析。这有点令人困惑,因为其他外部提供的依赖项(如org.json、reasteasy jaxrs)的所有依赖项都很好地显示在dependency hierarchy视图中 项目结构:项目是一个平台,由使用相同项目支持模块的多个服务组成。此外,项目支持也将用于外部项目(此处为项目消费者) 项目父项目(pom) 项目支持(jar) 项目服务a(战争) 项目服务b(jar) 项目消费者(war) 项

我正在与maven依赖性作斗争。maven依赖层次结构在我添加自定义构建jar的项目中没有得到解析。这有点令人困惑,因为其他外部提供的依赖项(如org.json、reasteasy jaxrs)的所有依赖项都很好地显示在dependency hierarchy视图中

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

  • 项目父项目(pom)
    • 项目支持(jar)
    • 项目服务a(战争)
    • 项目服务b(jar)
  • 项目消费者(war)
    • 项目支持(jar)
项目父项.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>
<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>
<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
../project serviceB
UTF-8
7.0.50
org.apache.tomcat
卡塔琳娜雄猫
${tomcat.version}
假如
org.codehaus.jackson
杰克逊地图绘制者
1.6.3
假如
org.json
json
20140107
假如
项目支持摘录。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>
<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>
<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>

com.somecompany.project
项目父级
1.1.0-快照
../项目父项
项目支持
项目支持
org.apache.tomcat
卡塔琳娜雄猫
org.codehaus.jackson
杰克逊地图绘制者
org.json
json
项目服务-a.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>
<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>
<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>

com.somecompany.project
项目服务A
1.1.0-快照
../项目父项
项目服务a
项目支持
com.somecompany.project
项目支持
org.quartz-scheduler
石英
2.2.1
因此,在查看project serviceA依赖关系层次结构(以及有效的pom)时,不包括项目支持所需的依赖关系,这会导致代码编译错误。此外,项目支持用于项目父项目范围之外的项目

所以我的问题是:为什么maven不解析项目支持的依赖关系树并将它们添加到有效的pom中

提前谢谢

您已将依赖项的范围设置为在家长的依赖项管理部分中提供的范围。根据,依赖范围用于限制依赖的传递性

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


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

感谢链接,在这样的背景下,我终于理解了这一点。这可能会影响我们的部署策略,但解决方案是可行的。谢谢