【问题标题】:How to compile a single module inside it in a multi-module maven project?如何在多模块 Maven 项目中编译其中的单个模块?
【发布时间】:2015-01-21 13:03:18
【问题描述】:

这可能是项目的样子:

  • 模块A

    -- pom.xml

  • 模块B

    -- pom.xml

  • pom.xml

moduleA 依赖于 moduleB。我在父 pom.xml 中设置了<modules>,在子 pom.xmls 中设置了其他配置。我可以在父目录中运行mvn package,但是每次我在moduleA的目录中运行mvn package都会失败。

我知道在父目录中运行mvn package -pl moduleA 可以解决问题。既然 Apache Flume 允许我在自己的目录中编译任何单个模块,为什么我的项目不能?

【问题讨论】:

  • 当你说它失败时,我猜测它提供了一个错误。您能否在每个 POM 中包含您的 <modules> 部分以及您收到的错误消息?
  • @Ascalonian 以下是错误消息的样子:[错误] 无法在项目模块 A 上执行目标:无法解析项目的依赖项...:无法收集 [...] 的依赖项: 无法读取 org.myorg.app.:moduleB:jar:1.0.0 的工件描述符:未能找到 org.myorg.app:app-parent:pom:1.0.0 in ... 已缓存在本地存储库中, 直到nexus的更新间隔过去或强制更新后才会重新尝试解析 -> [Help 1]

标签: java maven


【解决方案1】:

不是启动目标“包”,而是在根 pom(或只是模块 B)上启动目标“安装”。这会将 moduleB 放在本地存储库 (~/.m2/repository) 中,Maven 将能够在仅编译 moduleA 时获取它。然后你就可以只编译moduleA了。

【讨论】:

  • 是的,行得通。但是,如果 mvn install 由于项目中的某个其他模块而导致模块A 不依赖于编译失败怎么办?这种情况下有没有办法打包moduleA?
  • 您好,当且仅当在当前构建上下文、本地存储库或远程存储库中所有依赖项都可用时,Maven 才能编译模块A。
【解决方案2】:

我遇到了这个问题:ma​​ven 会话没有声明顶级项目

当我试图通过命令行运行一个模块时,例如:-mvn clean install -pl moduleA 它正在寻找父模块,所以我已经尝试过这个并且它与 :-mvn clean install -pl .,moduleA 在你的情况下你可以尝试这个假设依赖项已经在 maven repo 中构建并可用,否则 mvn clean install -pl .,moduleA --also-make 应该可以工作。这将仅在多模块 maven 项目中构建一个特定项目,正如我们指定的“。”它将构建解决问题的父 pom。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2012-07-05
    • 2021-03-23
    • 2014-09-14
    • 2016-06-21
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多