Я погуглил это, и кажется, что ни у кого нет ответа, все же на такую элементарную вещь кажется, что это должно быть возможно.
У меня есть следующая структура проекта:
parent
---sub-project1
---sub-project2
sub-project2 должен иметь sub-project1 как зависимость.
Таким образом, у меня есть это в англичанине sub-project2:
<dependencies>
<dependency>
<artifactId>sub-project1</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
....
Когда я делаю это, Знаток пробует к dowload sub-project1.jar файл, который не существует, потому что это еще не готово к repo.
Я пытался поместить a <scope>import</scope>
в зависимости, но это не работало ни один - тот же результат.
Таким образом, что я должен сделать, чтобы заставить Знатока смотреть на sub-project1 при создании 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/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
С большим количеством классов/пакета, не найденных ошибками
У вас должен быть мастер-помпон на родительском уровне, в котором вы будете перечислять модули вашего проекта.
<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 разрешает зависимости через локальный репозиторий, поэтому сначала необходимо установить
подпроект1. На самом деле, наиболее распространенный способ справиться с такой ситуацией - запустить сборку реактора (сборку с несколькими модулями) от родителя.
Предположим, вы объединяете модули в родительском каталоге, т.е. у вас есть что-то подобное, объявленное в «родительском» pom.xml
:
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
Просто cd
в родительский каталог и запустите сборка реактора:
$ cd parent
$ mvn install
Maven затем вычислит порядок сборки (вычитается из ориентированного графа, состоящего из модулей и их зависимостей) и запустит install
для всех модулей в расчетный порядок (сначала родительский, затем подпроект1 и, наконец, подпроект2 для вашего конкретного примера).
Но не используйте область типа import
, вы неправильно ее используете. Убери это.
Обновление: Вопрос был обновлен, пока я отвечал, и показанные POM не иллюстрируют ситуацию, заданную в исходном вопросе (обратная зависимость, вероятная ошибка в идентификаторе артефакта). Но предложенный подход все еще применим. Удалите
в зависимости и запустите сборку реактора из родительского.