Мультимодульный проект 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, В ModelPOM, 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?

Другие вопросы по тегам