Как настроить зависимость подпроекта в Maven без развертывания баннеров?
Я искал это, и кажется, что у кого-то нет ответа, но похоже, что такая элементарная вещь должна быть возможной.
У меня есть следующая структура проекта:
parent
---sub-project1
---sub-project2
sub-project2 должен иметь подпроект1 как зависимость.
Итак, у меня это в sub-project2 pom:
<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 при создании sub-project2?
РЕДАКТИРОВАТЬ Вот некоторые фрагменты 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>
....
суб-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>
....
суб-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
С большим количеством ошибок в классе/пакете
Ответы
Ответ 1
У вас должен быть главный 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 clean install на родительском уровне.
Ответ 2
Когда я это делаю, Maven пытается загрузить файл sub-project1.jar, которого нет, потому что он еще не готов к репо.
Что нормальное поведение, Maven разрешает зависимости через локальный репозиторий, поэтому вам нужно сначала install
sub-project1. На самом деле, общий способ справиться с такой ситуацией - начать сборку реактора (сборку из нескольких модулей) от родителя.
Предполагая, что вы агрегируете модули в родительском, т.е. у вас есть что-то вроде этого, объявленного в "родительском" pom.xml
:
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
Просто cd
в родительский каталог и запустите сборку реактора:
$ cd parent
$ mvn install
Затем Maven будет вычислять порядок сборки (вычитается из ориентированного графика из модулей и их зависимостей) и запускать install
во всех модулях в вычисленном порядке ( сначала родительский, затем подпроект1 и, наконец, подпроект2 для вашего конкретного примера).
Но не используйте scope типа import
, вы неправильно используете его здесь. Удалите его.
Обновление: Вопрос был обновлен, пока я отвечал, и показанные POM не иллюстрируют ситуацию, указанную в исходном вопросе (обратная зависимость, вероятная ошибка в id артефакта). Но предлагаемый подход все же применяется. Удалите <scope>import</scope>
от зависимости и запустите сборку реактора из родителя.
Ответ 3
Оба Паскаля и Максимилиано правы. Когда я извлекал все мои фрагменты, я заметил, что мои модули смешались - суб-проект2 был до суб-проекта1. Я переключил их и до сих пор получил класс, который не нашел ошибок. Я взял область, как предложил Паскаль, и это сработало.
Спасибо, что помогли новичкам Maven.