2016-12-12 56 views
1

所以基本上,我有一個多模塊項目,如無法在一個多模塊項目找到神器

- ProjectA 
    |- Module1 
    |- Module2 

相關部分(我相信)pom.xmlProjectA是:

<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。在單詞數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... 

更新: 有趣的是,刪除:

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

從父項目(ProjectA)使得該項目再次可建。但是,我需要它(出於顯而易見的原因)是否有解決方法?謝謝!

+0

您是否在建立'Module1'後確認存在'〜/ .m2/repository'? – nullpointer

+0

@nullpointer是的,我可以將它展示爲另一個項目的依賴項,比如'ProjectB',但是我不能將它導入到'ProjectB'的'Module3'中的.java文件中。 –

+0

你是什麼意思*顯示爲依賴*?這聽起來像,你總是可以寫一些代碼,但除非你編譯它,否則你不會知道它有什麼問題。 – nullpointer

回答

4

這兩個(或全部)項目都是Spring Boot項目。這些不是普通的罐子,而是具有不同結構的可執行罐子。你不應該在另一個Spring Boot jar中包含一個Spring Boot jar。

如何解決這個問題在參考指南中的section中有解釋。

基本上,你需要明確設置2件文物爲模塊1

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

或者,如果模塊1甚至不是一個可執行的應用程序,但只有一庫,不使用Spring啓動Maven插件爲了那個原因。

+0

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