2016-12-12 10 views
1

Так в основном, у меня есть проект с нескольких модулей, таких какНе удалось найти артефакт в проекте мульти-модуль

- ProjectA 
    |- Module1 
    |- Module2 

соответствующей части (я считаю) pom.xml для ProjectA является:

<modelVersion>4.0.0</modelVersion> 
<groupId>com.companyName</groupId> 
<artifactId>ProjectA</artifactId> 
<packaging>pom</packaging> 
<version>0.0.1-SNAPSHOT</version> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.1.RELEASE</version> 
</parent> 

<modules> 
    <module>Module1</module> 
    <module>Module2</module> 
</modules> 

И pom.xml для Module1 является:

<parent> 
    <groupId>com.companyName</groupId> 
    <artifactId>ProjectA</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

<modelVersion>4.0.0</modelVersion> 
<artifactId>Module1</artifactId> 
<packaging>jar</packaging> 
<version>0.0.1-SNAPSHOT</version> 

И pom.xml для module2, которая зависит от Module1 выглядит следующим образом:

<parent> 
    <groupId>com.companyName</groupId> 
    <artifactId>ProjectA</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>Module2</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 
<dependencies> 
    <dependency> 
     <groupId>com.companyName</groupId> 
     <artifactId>Module1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    ... 
</dependencies> 

Я могу построить и установить Module1 просто отлично. Я могу импортировать классы из него в Module2, но я не могу скомпилировать Module2 с: Could not find artifact com.companyName:ProjectA:pom:0.0.1-SNAPSHOT

Таким же образом я создаю еще один проект ProjectB, который будет иметь Module3. В Module3 pom.xml:

<dependency> 
    <groupId>com.companyName.ProjectA</groupId> 
    <artifactId>Module1</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</dependency> 

Но все же, я не могу импортировать его в моих файлах .java, а com.companyName.ProjectA нет, IntelliJ предупреждает меня. Что я делаю не так? Я пробовал почти каждую конфигурацию в связанных многомодульных проектных вопросах. Благодаря!

Обновления: Выход консоли изменилось на:

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[3,39] package com.companyName.ProjectA.Module1 does not exist 
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[9,6] cannot find symbol... 

Update: Интересно, что удаление:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

от родительского проекта (ProjectA) делает проект работоспособен снова. Тем не менее, мне это нужно (по понятным причинам) Есть ли обходной путь для этого? Благодаря!

+0

Вы подтвердили наличие в '~/.m2/repository' после сборки' Module1'? – nullpointer

+0

@nullpointer Да, и я могу показать его как зависимость для еще одного проекта, например 'ProjectB', но я не могу импортировать его в свои .java-файлы в' Module3' 'ProjectB'. –

+0

Что значит * показать это как зависимость *? Это звучит примерно так: вы всегда можете написать какой-то фрагмент кода, но если вы его не скомпилируете, вы не будете знать, что в этом плохого. – nullpointer

ответ

4

Оба проекта (или все) являются проектами Spring Boot. Это не обычные банки, а исполняемые банки с другой структурой. Вы не должны включать банку Spring Boot в другой банке Spring Boot.

Как справиться с этим объясняется в section в справочном руководстве.

В принципе, вы должны явно сконфигурировать 2 артефакты для Module1

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <classifier>exec</classifier> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Или если Module1 даже не исполняемое приложение, но только библиотека, не использовать плагин Spring Загрузочный Maven для этого.

+0

https://www.youtube.com/watch?v=HBxt_v0WF6Y –