欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring boot项目没有mainClass如何实现打包运行

程序员文章站 2022-03-09 22:11:50
目录springboot项目没有mainclass实现打包运行框架starter运行类如下业务代码模块如何配置?使用maven打包指定mainclassspringboot项目没有mainclass实...

springboot项目没有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>

使用maven打包指定mainclass

<build>
        <plugins>
            <plugin>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-maven-plugin</artifactid>
                <configuration>
                    <mainclass>com.xxx.xxxapplication</mainclass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。