Maven多模块项目无法找到兄弟模块

问题描述:

我似乎无法让Maven在多模块项目中找到兄弟模块。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(这是在父(Productpom.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> 

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

您会收到错误消息:您只是在编译Model。在Model的POM中,Maven发现它依赖于MagniCompCommon,所以它试图寻找这种依赖关系。首先,它会在您当地的回购库中进行搜索:由于您之前没有安装MagniCompCommon,因此无法在其中找到它。因此,它会在预定义的远程存储库中查找它(并且无法找到它)。

您将能够通过首先运行mvn clean installMagniCompCommon的POM,然后在Model POM上运行mvn clean install,但通过直接在根POM上直接调用Maven可以轻松完成。它会以正确的顺序正确构建每个模块(因为Model取决于MagniCompCommon,它将首先构建MagniCompCommon,然后Model)。

作为便笺,您可以删除行<packaging>jar</packaging>,因为这是默认设置。

+0

是的,这是问题!我需要在父级“产品”目录中。这样的新手错误!非常感谢! –

我注意到MagniCompCommon POM犯规指定版本

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

而且在产品 POM,如果引用版本1.0

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

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

+3

你不需要指定一个版本,模块将从父版本继承(本例中为1.0)。 – Tunaki