Maven:项目如何能够从辅助的先前依赖项引用类

时间:2014-07-07 18:38:50

标签: java maven

我正在使用Maven并创建自己的模块。

我有 01CentralDomain 项目 使用简单的 com.manuel.jordan.domain 包和三个@Entities 其中一个例如是产品

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 项目 再次使用与两个新的@Entities相同的简单 com.manuel.jordan.domain 包 其中一个例如是用户

考虑一下第一个项目的扩展

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 个答案:

答案 0 :(得分:1)

你应该使用不同的artifactId。 Maven认为(粗略地)groupId:artifactId作为&#34;主键&#34;对于你的模块,如果你依赖于两个不同版本的模块XXX:YYY那么它将只包括&#34;最合适的一个&#34;,通常是版本较高的那个。

此外,事实证明两个不同的模块是你真正想要的,因为你没有真正拥有相同模块的两个版本,但是模块X依赖于不同的Y,而第三个模块Z依赖于在X和Y上(直接依赖于X,以及间接依赖于Y到X)。

所以如果你有:

01CentralDomain 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>

然后一切都应该&#34;只是工作&#34;