Как настроить зависимость подпроекта в Maven без развертывания банок?
-
24-09-2019 - |
Вопрос
Я поглотил это, и кажется, что никто не имеет ответа, но кажется, что такое элементарное, что это должно быть возможно.
У меня есть следующая структура проекта:
parent
---sub-project1
---sub-project2
Sub-Project2 необходимо иметь подпрограмм1 как зависимость.
Итак, у меня это в POM Sub-Project2:
<dependencies>
<dependency>
<artifactId>sub-project1</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
....
Когда я делаю это, Maven пытается создать файл sub-project1.jar, который не существует, потому что он еще не готов к репо.
Я пытался поставить <scope>import</scope>
В зависимости, но это не сработало ни один результат.
Итак, что мне нужно сделать, чтобы заставить Maven посмотреть на Sub-Project1, когда строит подпрограмм2?
РЕДАКТИРОВАТЬ Вот несколько фрагментов 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>
....
Sub-Project1:
<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>
....
Sub-Project2:
<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
С множеством классов / пакета не нашли ошибки
Решение
У вас должен быть главный POM на уровне родителей, в котором вы перечислите модули вашего проекта.
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
В каждом подпроекте вы должны ссылаться на ваш родитель:
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
И вы указываете зависимости между проектом так же, как вы сделали. Я думаю, что вы пропустили некоторые из шагов, которые я описал.
Редактировать: Вы должны выдать свой MVN чистая установка на родительском уровне.
Другие советы
Когда я делаю это, Maven пытается создать файл sub-project1.jar, который не существует, потому что он еще не готов к репо.
Это нормальное поведение, Maven разрешает зависимости через локальный репозиторий, чтобы вам нужно install
Sub-Project1 сначала. На самом деле, общий способ справиться с такой ситуацией, состоит в том, чтобы запустить сборку реактора (сборки много модулей) от родителя.
Предполагая, что вы агрегирующие модули в родительском языке, т.е. у вас есть что-то подобное, объявлено в «родительском» pom.xml
:
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
Только что cd
В родительский каталог и запустить реактор Build:
$ cd parent
$ mvn install
Maven будет тогда Рассчитайте порядок сборки (вычитается из ориентированного графа из модулей и их зависимостей) и прогон install
На всех модулях В рассчитанном порядке (Parent First, затем Sub-Project1 и, наконец, Sub-Project2 для вашего конкретного примера).
Но не используйте объем Тип import
, Вы не злоупотребляете это здесь. Убери это.
Обновлять: Вопрос был обновлен, пока я ответил, и показанные поммы не иллюстрируют ситуацию, приведенную в исходном вопросе (обратная зависимость, вероятная ошибка в артефактном ID). Но предложенный подход по-прежнему относится. Удалить <scope>import</scope>
в зависимости и начать реактор сборки от родителя.