Как настроить зависимость подпроекта в Maven без развертывания jar?



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



У меня есть следующая структура проекта:



parent
---sub-project1
---sub-project2


Субпроект2 должен иметь субпроект1 в качестве зависимости.



Итак, у меня есть это в POM sub-project2:



 <dependencies>
<dependency>
<artifactId>sub-project1</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>


....



Когда я делаю это, Maven пытается загрузить подпроект1.jar-файл, который не существует, потому что он еще не готов к РЕПО.



Я попытался поставить a <scope>import</scope> в зависимости, но это тоже не сработало-тот же результат.



Так что я должен сделать, чтобы получить Maven для посмотреть на суб-проект1 при построении суб-проект2?



EDIT вот некоторые фрагменты pom:



Родитель:



<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<maven>2.0.9</maven>
</prerequisites>
<modules>
<module>sub-project1</module>
<module>sub-project2</module>
</modules>
....


Подпроект1:



<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">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>sub-project1</artifactId>
....


Подпроект2:



<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">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>sub-project1</artifactId>

<dependencies>
....
<dependency>
<artifactId>sub-project2</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
<scope>import</scope>
</dependency>
</dependencies>


Ошибка, которую я получаю, когда получаю mvn clean install на родителе:



[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure


С большим количеством классов / пакетов не найдено ошибок

568   3  

3 ответов:

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

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

В каждом подпроекте вы должны ссылаться на своего родителя:

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

И вы точно так же задаете зависимости между проектами. Я думаю, что вы пропустили некоторые шаги, которые я описал.

Edit: вы должны выпустить свой mvn clean install на родительском уровне.

Когда я делаю это, Maven пытается загрузить подпроект1.jar-файл, который не существует, потому что он еще не готов к РЕПО.

Это нормальное поведение, Maven разрешает зависимости через локальный репозиторий, поэтому сначала вам нужно install subproject1. На самом деле, обычный способ справиться с такой ситуацией-запустить сборку реактора (сборку из нескольких модулей) от родителя.

Предполагая, что вы агрегируете модули в Родительском, т. е. что-то вроде этого заявлено в "родителе" pom.xml:

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

Просто cd в родительский каталог и запустите сборку реактора:

$ cd parent
$ mvn install

Maven затем вычислит порядок построения (вычтенный из ориентированного графа, состоящего из модулей и их зависимостей) и выполнит install на всех модулях в вычисленном порядке (сначала Родительский, затем подпроект1 и, наконец, подпроект2 для вашего конкретного примера).

Но не используйте область типа import, вы злоупотребляете им здесь. Удалить его.

Update: Вопрос был обновлен, пока я отвечал, и показанные Pom не иллюстрируют ситуацию, приведенную в исходном вопросе (обратная зависимость, вероятная ошибка в идентификаторе артефакта). Но предложенный подход все же применим. Удалите <scope>import</scope> из зависимости и запустите сборку реактора из родительского элемента.

И Паскаль, и Максимилиано правы. Когда я собрал все свои фрагменты pom, я заметил, что мои модули перемешаны - sub-project2 был до sub-project1. Я поменял их местами, и все равно в классе не нашли ошибок. Я достал прицел, как и предлагал Паскаль, и он сработал.

Спасибо за помощь новичку Maven.

Comments

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