Мэйвен не распознает модули брат при выполнении команды mvn зависимость:дерево



Я пытаюсь настроить многомодульный проект Maven, и межмодульные зависимости, по-видимому, не настраиваются правильно.



Я:





<modules>
<module>commons</module>
<module>storage</module>
</modules>


в Родительском POM (который имеет упаковочный тип pom)
а потом подкаталоги commons/ и storage/ которые определяют JAR poms с тем же именем.



хранение зависит от общего.



в главном (главном) каталоге я запускаю mvn dependency:tree и видим:



[INFO] Building system
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] - junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT


почему зависимость от "общего" терпит неудачу, хотя реактор, очевидно, видел это, потому что он успешно обрабатывает свое дерево зависимостей? Он определенно не должен идти в сеть, чтобы найти его, поскольку он прямо там...



pom для хранения:



<?xml version="1.0" encoding="UTF-8"?>
<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>
<packaging>jar</packaging>
<parent>
<artifactId>system</artifactId>
<groupId>domain</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>domain</groupId>
<artifactId>storage</artifactId>
<name>storage</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- module dependencies -->
<dependency>
<groupId>domain</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<!-- other dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>


Спасибо за любые предложения!



(Edit)



чтобы уточнить, что я ищу здесь, это: я не хочу устанавливать модуль X для сборки модуля Y, который зависит от X, учитывая, что оба они модули, на которые ссылается один и тот же Родительский POM. Это имеет интуитивный смысл для меня, что если у меня есть две вещи в одном исходном дереве, мне не нужно устанавливать промежуточные продукты для продолжения сборки. Надеюсь, мое мышление имеет какой-то смысл здесь...

744   6  

6 ответов:

Я думаю, что проблема заключается в том, что при указании зависимости Maven ожидает, что она будет упакована как jar (или что-то еще) и доступна по крайней мере из локального РЕПО. Я уверен, что если вы запустите mvn install на вашем проекте commons сначала все будет работать.

Как говорится в этот поток списка рассылки maven, зависимость: цель дерева сама по себе будет искать вещи в репозитории, а не в реакторе. Вы можете обойти это, установив mvn, как предлагалось ранее, или сделав что-то менее обременительное, что вызывает реактор, например

mvn compile dependency:tree

работает для меня.

понимая, что это более старый поток, но кажется, что либо инструмент эволюционировал, либо это могло быть пропущено в первый раз.

можно выполнить сборку, которая разрешает зависимости без установки, выполнив сборку реактора.

Если вы начинаете сборку в родительском элементе, который описывает структуру модуля вашего проекта, то ваши зависимости между вашими модулями будут разрешены во время самой сборки через внутренний Maven реактор.

конечно, это не идеальное решение, так как оно не решает сборку одного отдельного модуля в структуре. В этом случае Maven не будет иметь зависимостей в своем реакторе и будет искать решение в репозитории. Поэтому для отдельных сборок вам все равно придется сначала установить зависимости.

вот ссылка описание этой ситуации.

единственное, что работает для меня: переключение на gradle : (

У меня есть

Parent
  +---dep1
  +---war1 (using dep1)

и я могу просто cd в war1 и использовать mvn tomcat7: run-war. Я всегда должен установить весь проект раньше, несмотря на то, что war1 ссылается на своего родителя, а родительские ссылки war1 и dep1 (как модули), поэтому все зависимости должны быть известны.

Я не понимаю, в чем проблема.

для меня то, что привело меня к этому потоку, было аналогичной проблемой, и решение состояло в том, чтобы обеспечить, чтобы все зависимости модуля pom имели

 <packaging>pom</packaging>

у родителя было

пом

У моей модели dep был pom-поэтому не было никакой банки.

убедитесь, что модуль, который не удается решить, указывает на правильный родитель, включая конфигурации в POM-файл модуля.

Comments

    Ничего не найдено.