【问题标题】:Maven MultiModule local install does not updateMaven MultiModule 本地安装不更新
【发布时间】:2020-02-03 04:25:11
【问题描述】:
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、使缓存无效并重新启动、启用更新快照等

【问题讨论】:

  • 请在 github 上创建一个示例项目,并展示究竟是什么不起作用...

标签: maven maven-module


【解决方案1】:

Module A 和 Module 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 中声明对它的依赖是没有意义的。

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

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

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

【讨论】:

  • 我有一个shade插件可以把jar打包到模块里面。
  • shade 插件可以操作工件(构建的输出),但为此您应该首先以正确的方式构建工件...我真的建议您尝试我之前先解释的配置使用阴影插件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
相关资源
最近更新 更多