spring boot專案沒有mainClass如何打包執行
專案分為兩個部分,一個是業務程式碼模組,一個是框架模組,執行class放在框架部分,那業務程式碼如何配置才能正常執行?
框架starter執行類如下
@SpringBootApplication(
scanBasePackages = {"com"}
)
public class Starter {
@SpringBootApplication只會掃描@SpringBootApplication註解標記類包下及其子包的類(特定註解標記,比如說@Controller,@Service,@Component,@Configuration和@Bean註解等等)納入到spring容器,如果不在@SpringBootApplication註解標記類相同包下及其子包的類,需要我們去配置一下掃包路徑,即scanBasePackages 。
業務程式碼模組如何配置?
藉助spring-boot-maven-plugin配置如下
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.core.Starter</mainClass> <layout>ZIP</layout> <classifier>exec</classifier> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
mainClass最終會在jar包裡的MANIFEST.MF檔案中指定
Start-Class: com.core.Starter
Spring Boot Maven plugin的5個Goals
spring-boot:repackage,預設goal。在mvn package之後,再次打包可執行的jar/war,同時保留mvn package生成的jar/war為.origin
spring-boot:run,執行Spring Boot應用
spring-boot:start,在mvn integration-test階段,進行Spring Boot應用生命週期的管理
spring-boot:stop,在mvn integration-test階段,進行Spring Boot應用生命週期的管理
spring-boot:build-info,生成Actuator使用的構建資訊檔案build-info.properties
layout屬性的值可以如下:
JAR,即通常的可執行jar
Main-Class: org.springframework.boot.loader.JarLauncher
WAR,即通常的可執行war,需要的servlet容器依賴位於WEB-INF/lib-provided
Main-Class: org.springframework.boot.loader.warLauncher
ZIP,即DIR,類似於JAR
Main-Class: org.springframework.boot.loader.PropertiesLauncher
MODULE,將所有的依賴庫打包(scope為provided的除外),但是不打包Spring Boot的任何Launcher
NONE,將所有的依賴庫打包,但是不打包Spring Boot的任何Launcher
classifier
生成可執行jar包的字尾名
includeSystemScope
將system範圍依賴包也打進來,如
<dependency>
<groupId>com.alipay</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>
${project.basedir}/local_repo/com/alipay/alipay-sdk-java/1.1/alipay-sdk-java-1.1.jar
</systemPath>
</dependency>