1. 程式人生 > >spring boot專案沒有mainClass如何打包執行

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>