使用springboot搭建多模塊項目,pom引用依賴關係正常,編譯正常狀況。父項目maven package出現以下異常:java
(1)第一類異常
[ERROR] 符號: 類 xxx
[ERROR] xxx.java:[7,38] 程序包xxx不存在
檢查以下父pom以及其餘非打包模塊的pom文件是否存在以下插件,如有則刪除或註釋次插件(嵌套引用下插件形成編譯異常)web
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
注意 若是父pom是工程運行所需模塊,spring-boot-maven-plugin不可刪除,調整爲如下模式spring
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <classifier>exec</classifier>
<!--classifier:SpringBoot工程打包編譯時,會生成兩種jar包,一種是普通的jar,另外一種是可執行jar。默認狀況下,這兩種jar的名稱相同,在不作配置的狀況下,
普通的jar先生成,可執行jar後生成,形成可執行jar會覆蓋普通的jar,因此編譯失敗:程序包xxx不存在。>
</configuration>
</plugin>
一般僅在app工程中使用此插件(配合devtools設置熱部署)apache
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 若是沒有該項配置,個devtools不會起做用,即應用不會restart --> <fork>true</fork> </configuration> </plugin> </plugins>
(2)第二類異常
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test) on project webapp: There are test failures.
檢查各個測試類是否打包跳過編譯,能夠使用@ignore註解(編譯時跳過測試用例類)springboot
@Ignore
@RunWith(SpringRunner.class)
@SpringBootTest
public class CommonApplicationTests {
@Test
public void contextLoads() {
}
}app
(3)第三類異常
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project webapp: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage failed: Unable to find main class -> [Help 1]
spring-boot-maven-plugin插件會自動掃描啓動類 並執行啓動類main方法,因此檢測使用插件工程下是否存在啓動類(位置是否正確) 若沒有添加啓動類加@SpringBootApplication並重寫main方法webapp
@SpringBootApplication public class WebappApplication { public static void main(String[] args) { SpringApplication.run(WebappApplication.class, args); } }
最後:maven clean 後 maven packagemaven