Как настроить зависимость подпроекта в 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.