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
(这是在父(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>
当你正在构建一个多模块Maven项目,你需要运行Maven命令根POM。这意味着您需要在Product
的pom.xml
上运行mvn clean install
。
您会收到错误消息:您只是在编译Model
。在Model
的POM中,Maven发现它依赖于MagniCompCommon
,所以它试图寻找这种依赖关系。首先,它会在您当地的回购库中进行搜索:由于您之前没有安装MagniCompCommon
,因此无法在其中找到它。因此,它会在预定义的远程存储库中查找它(并且无法找到它)。
您将能够通过首先运行mvn clean install
MagniCompCommon
的POM,然后在Model
POM上运行mvn clean install
,但通过直接在根POM上直接调用Maven可以轻松完成。它会以正确的顺序正确构建每个模块(因为Model
取决于MagniCompCommon
,它将首先构建MagniCompCommon
,然后Model
)。
作为便笺,您可以删除行<packaging>jar</packaging>
,因为这是默认设置。
我注意到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?
你不需要指定一个版本,模块将从父版本继承(本例中为1.0)。 – Tunaki
是的,这是问题!我需要在父级“产品”目录中。这样的新手错误!非常感谢! –