我正在使用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>
它不起作用。
我怎么能这样做?
答案 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;