使用springboot搭建多模塊項目,pom引用依賴關系正常,編譯正常情況。父項目maven package出現如下異常:
(1)第一類異常
[ERROR] 符號: 類 xxx
[ERROR] xxx.java:[7,38] 程序包xxx不存在
檢查如下父pom以及其他非打包模塊的pom文件是否存在如下插件,若有則刪除或注釋次插件(嵌套引用下插件造成編譯異常)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
注意 如果父pom是工程運行所需模塊,spring-boot-maven-plugin不可刪除,調整為以下模式
<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設置熱部署)
<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注解(編譯時跳過測試用例類)
@Ignore
@RunWith(SpringRunner.class)
@SpringBootTest
public class CommonApplicationTests {
@Test
public void contextLoads() {
}
}
(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方法
@SpringBootApplication public class WebappApplication { public static void main(String[] args) { SpringApplication.run(WebappApplication.class, args); } }
最后:maven clean 后 maven package