有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaMaven:一个项目如何能够从一个二级依赖引用一个类

我正在与Maven合作并创建自己的模块

我有一个01CentralDomain项目 使用简单的com。曼努埃尔。乔丹。域包含三个@实体的包 例如,产品

它的pom的一部分。xml是:

<modelVersion>4.0.0</modelVersion>
<groupId>com.manuel.jordan.centraldomain</groupId>
<artifactId>central-domain</artifactId>
<packaging>jar</packaging>
<name>01CentralDomain</name>
<version>1.0.1</version>
<url>https://github.com/manueljordan/</url>

我有另一个02CentralDomain项目 再次使用相同的简单com。曼努埃尔。乔丹。域包含两个新@实体的包 其中一个是例如用户

考虑第一个项目

如何扩展

它的pom的一部分。xml是:

<modelVersion>4.0.0</modelVersion>
<groupId>com.manuel.jordan.centraldomain</groupId>
<artifactId>central-domain</artifactId>
<packaging>jar</packaging>
<name>02CentralDomain</name>
<version>1.0.2</version>
<url>https://github.com/manueljordan/</url>
...
<dependencies>

    <dependency>
        <groupId>com.manuel.jordan.centraldomain</groupId>
        <artifactId>central-domain</artifactId>
        <version>1.0.1</version>
    </dependency>

</dependencies>

因此,实际上我的第二个项目可以访问第一个项目,它将能够引用三个实体,如产品,我们可以假设我的包现在总共有5个实体,第二个为3+2

现在我有第三个项目(02CentralExecution)

它的pom的一部分。xml是:

<modelVersion>4.0.0</modelVersion>
<groupId>com.manuel.jordan.centralexecution</groupId>
<artifactId>central-execution</artifactId>
<packaging>jar</packaging>
<name>02CentralExecution</name>
<version>1.0.2</version>
<url>https://github.com/manueljordan/</url>
...
<dependencies>

    <dependency>
        <groupId>com.manuel.jordan.centraldomain</groupId>
        <artifactId>central-domain</artifactId>
        <version>1.0.2</version>
    </dependency>

</dependencies>

理论上,第三个项目可以访问第二个项目的源代码,因此第一个项目的源代码也可以访问

它不工作,第三个项目只能访问第二个项目的源代码。 我可以使用用户类,但不能使用产品

即使我两者都申报

<dependencies>

    <dependency>
        <groupId>com.manuel.jordan.centraldomain</groupId>
        <artifactId>central-domain</artifactId>
        <version>1.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.manuel.jordan.centraldomain</groupId>
        <artifactId>central-domain</artifactId>
        <version>1.0.2</version>
    </dependency>

</dependencies>

它不起作用

我怎样才能开始工作


共 (1) 个答案

  1. # 1 楼答案

    您应该使用不同的artifactId。Maven认为(大致上)groupId:artifactId是模块的“主键”,如果您依赖于模块XXX:YYY的两个不同版本,那么它将只包括“最合适的一个”,通常是具有更高版本的一个

    此外,事实证明,两个不同的模块才是您真正想要的,因为您实际上没有相同模块的两个版本,而是一个模块X依赖于一个不同的Y,第三个模块Z依赖于X和Y(直接依赖于X,间接依赖于Y到X)

    因此,如果你有:

    01中央域名pom。xml:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.manuel.jordan.centraldomain</groupId>
    <artifactId>central-domain-01</artifactId><!  note renamed artifactId  >
    <packaging>jar</packaging>
    <name>01CentralDomain</name>
    <version>1.0.1</version>
    <url>https://github.com/manueljordan/</url>
    

    02CentralDomain pom。xml:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.manuel.jordan.centraldomain</groupId>
    <artifactId>central-domain-02</artifactId><!  note renamed artifactId  >
    <packaging>jar</packaging>
    <name>02CentralExecution</name>
    <version>1.0.1</version><!  Not a higher version, but a different module!!!  >
    <url>https://github.com/manueljordan/</url>
    ...
    <dependencies>
    
        <dependency>
            <groupId>com.manuel.jordan.centraldomain</groupId>
            <artifactId>central-domain-01</artifactId>
            <version>1.0.1</version>
        </dependency>
    
    </dependencies>
    

    02CentralExecution pom。xml:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.manuel.jordan.centralexecution</groupId>
    <artifactId>central-execution</artifactId>
    <packaging>jar</packaging>
    <name>02CentralExecution</name>
    <version>1.0.1</version><!  Version 1.0.2 makes no sense now, just use 1.0.1  >
    <url>https://github.com/manueljordan/</url>
    ...
    <dependencies>
    
        <dependency>
            <groupId>com.manuel.jordan.centraldomain</groupId>
            <artifactId>central-domain-02</artifactId>
            <version>1.0.1</version>
        </dependency>
    
    </dependencies>
    

    那么一切都应该“正常运转”