Мультимодульный проект Maven не может найти одноуровневый модуль
Кажется, я не могу заставить Мейвена найти модуль родного брата в многомодульном проекте.
Я бегал mvn clean install
во всех модулях.
Вот настройки:
Product
+-- MagniCompCommon
+-- Model
Model
проект имеет MagniCompCommon
как зависимость. Когда я бегу mvn clean compile
в Model
, Я получил:
[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 пытается найти MagniCompCommon
в репозитории java.net (это первая запись репозитория в родительском репозитории (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>
2 ответа
Когда вы создаете многомодульный проект Maven, вам нужно запускать команды Maven из корневого POM. Это означает, что вам нужно бежать mvn clean install
на Product
"s pom.xml
,
Ожидаемая ошибка: вы только строите Model
, В Model
POM, Maven видит, что есть зависимость от MagniCompCommon
поэтому он пытается найти эту зависимость. Во-первых, он ищет в вашем локальном репо: он не может найти его там, так как вы не установили MagniCompCommon
до. В результате он ищет его в предопределенных удаленных репозиториях (а также не может его найти).
Вы сможете обойти это, сначала запустив mvn clean install
на MagniCompCommon
ПОМ, потом на Model
POM, но это гораздо проще сделать, вызвав Maven непосредственно из корневого POM. Он будет правильно собирать все модули в правильном порядке (так как Model
зависит от MagniCompCommon
Будем строить MagniCompCommon
сначала, потом Model
).
Как примечание стороны, вы можете удалить линию <packaging>jar</packaging>
потому что это по умолчанию.
Я заметил, что 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>
Вы пытались указать версию 1.0 в MagniCompCommon pom?