【问题标题】:Maven multi module project cannot find sibling moduleMaven多模块项目找不到兄弟模块
【发布时间】:2016-01-12 22:16:36
【问题描述】:

我似乎无法让 Maven 在多模块项目中找到兄弟模块。

我在所有模块中都运行了mvn clean install

设置如下:

Product
+-- MagniCompCommon
+-- Model

Model 项目具有 MagniCompCommon 作为依赖项。当我在Model 中运行mvn clean compile 时,我得到:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Model 1.0
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for com.magnicomp:MagniCompCommon:jar:1.0 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.585 s
[INFO] Finished at: 2015-10-14T10:09:04-07:00
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project Model: Could not resolve dependencies for project com.magnicomp:Model:jar:1.0: Failure to find com.magnicomp:MagniCompCommon:jar:1.0 in http://download.java.net/maven/2/ was cached in the local repository, resolution will not be reattempted until the update interval of Java.Net has elapsed or updates are forced -> [Help 1]

如您所见,Maven 正在尝试在 java.net 存储库中找到 MagniCompCommon(这是父 (Product) pom.xml 中的第一个存储库条目)。

这是产品pom.xml

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

  <groupId>com.magnicomp</groupId>
  <artifactId>Product</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>


  <modules>
    <module>MagniCompCommon</module>
    <module>Model</module>
    <module>Common</module>
    <module>Agent</module>
    <module>Doc</module>
  </modules>

... snip ...

    <repositories>
        <repository>
            <id>Java.Net</id>
            <url>http://download.java.net/maven/2/</url>
        </repository>

这里是 MagniCompCommon pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>com.magnicomp</groupId>
        <artifactId>Product</artifactId>
        <version>1.0</version>
    </parent>

    <!-- <groupId>com.magnicomp.common</groupId> -->
    <artifactId>MagniCompCommon</artifactId>
    <packaging>jar</packaging>

这里是型号pom.xml

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

    <parent>
        <groupId>com.magnicomp</groupId>
        <artifactId>Product</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>Model</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.magnicomp</groupId>
            <artifactId>MagniCompCommon</artifactId>
            <version>1.0</version>
        </dependency>

    </dependencies>

</project>

【问题讨论】:

    标签: java maven multi-module


    【解决方案1】:

    当您构建多模块 Maven 项目时,您需要从根 POM 运行 Maven 命令。这意味着您需要在Productpom.xml 上运行mvn clean install

    你得到的错误是预期的:你只是在构建Model。在Model 的POM 中,Maven 发现MagniCompCommon 存在依赖关系,因此它尝试查找该依赖关系。首先,它在您的本地仓库中搜索:由于您之前没有安装MagniCompCommon,因此无法在其中找到它。结果,它在预定义的远程存储库中查找它(也找不到它)。

    您可以通过首先在 MagniCompCommon 的 POM 上运行 mvn clean install,然后在 Model POM 上运行来规避此问题,但通过直接在根 POM 上调用 Maven 更容易做到这一点。它将以正确的顺序正确构建每个模块(因为Model 依赖于MagniCompCommon,它将首先构建MagniCompCommon然后 Model)。

    作为旁注,您可以删除 &lt;packaging&gt;jar&lt;/packaging&gt; 行,因为这是默认设置。

    【讨论】:

    • 是的,这就是问题所在!我需要在父“产品”目录中。这样的新手错误!非常感谢!
    【解决方案2】:

    我注意到 MagniCompCommon pom 没有指定版本

    <!-- <groupId>com.magnicomp.common</groupId> -->
    <artifactId>MagniCompCommon</artifactId>
    <packaging>jar</packaging>
    

    Product pom 中,您引用的是 1.0

    版本
    <dependency>
        <groupId>com.magnicomp</groupId>
        <artifactId>MagniCompCommon</artifactId>
        <version>1.0</version>
    </dependency>
    

    您是否尝试过在 MagniCompCommon pom 中指定版本 1.0

    【讨论】:

    • 不需要指定版本,模块会继承父版本(本例中为1.0)。
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2020-03-20
    • 1970-01-01
    • 2017-11-26
    • 2014-09-14
    • 2016-06-12
    • 2021-04-02
    • 2018-02-06
    相关资源
    最近更新 更多