Как настроить зависимость подпроекта в Maven без развертывания банок?

StackOverflow https://stackoverflow.com/questions/2585220

  •  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> в зависимости и начать реактор сборки от родителя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top