0
Project A
   --Module B    
      --pom.xml
   --Module C    
      --pom.xml    
pom.xml

我正在处理一个多模块项目,其中项目 A、模块 B 和模块 C 都有自己的 pom 文件。模块 A 和模块 B 引用 ProjectA pom 文件。

我在 moduleB 的 pom 文件中使用 ModuleA 作为依赖项。

我在 moduleA 中添加了几个包并执行了 mvn clean install

它使用我所做的最新更改更新了我的 .m2 存储库。

然后我在 moduleB 上进行了 mvn clean install,但是 moduleB 仍然无法识别模块 A 中的最新更改。

我尝试了以下方法,但对我有用

  1. 删除 .m2 文件夹并进行 Maven 全新安装
  2. 在根文件夹上构建 mvn clean install
  3. 使用 Intellij,使缓存无效并重新启动,启用更新快照等
4

1 回答 1

0

模块 A 和模块 B 引用 ProjectA pom 文件

ProjectA应该有包装“pom”并成为其他模块的“聚合器”。它pom.xml应该是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo.bar</groupId>
    <artifactId>myartifactname</artifactId>
    <version>0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
      <module>ModuleB</module>
      <module>ModuleC</module>
    </modules>
</project>

ProjectA不应包含任何源文件,因此在模块 B 和 C 中声明对它的依赖是没有意义的。

但是模块的 A pom.xml 可以包含所有模块通用的定义(如插件配置、属性等)。在这种情况下,您可以在模块 B 和 C 中使用继承。例如模块 B 和 C(但不是 A)可以具有一个“父”部分,他们将在其中将 ProjectA 声明为“父”,从而继承上述定义。

我在 moduleB 的 pom 文件中使用 ModuleA 作为依赖项

同样,正如我在上面解释的那样,这没有意义。ProjectA 不是 java 模块,并且由于它具有打包 pom,因此没有从该模块构建的真正工件(读取 jar)。

于 2020-02-03T04:39:12.653 回答