Как настроить зависимость подпроекта в 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
С большим количеством классов / пакетов не найдено ошибок
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 разрешает зависимости через локальный репозиторий, поэтому сначала вам нужно
installsubproject1. На самом деле, обычный способ справиться с такой ситуацией-запустить сборку реактора (сборку из нескольких модулей) от родителя.Предполагая, что вы агрегируете модули в Родительском, т. е. что-то вроде этого заявлено в "родителе"
pom.xml:<modules> <module>sub-project1</module> <module>sub-project2</module>> </modules>Просто
cdв родительский каталог и запустите сборку реактора:$ cd parent $ mvn installMaven затем вычислит порядок построения (вычтенный из ориентированного графа, состоящего из модулей и их зависимостей) и выполнит
installна всех модулях в вычисленном порядке (сначала Родительский, затем подпроект1 и, наконец, подпроект2 для вашего конкретного примера).Но не используйте область типа
import, вы злоупотребляете им здесь. Удалить его.Update: Вопрос был обновлен, пока я отвечал, и показанные Pom не иллюстрируют ситуацию, приведенную в исходном вопросе (обратная зависимость, вероятная ошибка в идентификаторе артефакта). Но предложенный подход все же применим. Удалите
<scope>import</scope>из зависимости и запустите сборку реактора из родительского элемента.
И Паскаль, и Максимилиано правы. Когда я собрал все свои фрагменты pom, я заметил, что мои модули перемешаны - sub-project2 был до sub-project1. Я поменял их местами, и все равно в классе не нашли ошибок. Я достал прицел, как и предлагал Паскаль, и он сработал.
Спасибо за помощь новичку Maven.
Comments