用gradle搭建的SpingBoot项目打包为jar包部署到服务器上(简单的方式)

工具为 IDEA

第一步:在gradle.build配置文件中设置启动类

第二部:打开gradle窗口,找到build->task->jar然后就打包成jar文件啦,可以在项目build目录下找到

关于jar文件的结构:解压jar包,可以看到包含三个文件夹

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF //配置类
 +-org
 |  +-springframework //springboot的框架
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-BOOT-INF
    +-classes //部署到服务器的内容,网页呀,主入口类什么的
    |  +-mycompany
    |     +-project
    |        +-YourClasses.class
    +-lib
       +-dependency1.jar  //依赖的jar包
       +-dependency2.jar
其中SpringBoot提供的bootstrap的类是放到包的最外面,比如上面的org.springframework.boot.loader。 应用程序自己的代码则是需要放到BOOT-INF/classes目录下面;然后应用程序自己依赖的其它的jar文件则需要放到BOOT-INF/lib目录下。

当这个jar作为standardalone的程序运行时(没有放到container),SpringBoot会在生成的META-INF/MANIFEST.MF里面将Main-Class设置成org.springframework.boot.loader.JarLauncher,JarLauncher类会创建一个spring自己的ClassLoader: LaunchedURLClassLoader, 这个classloader 会就能通过URL来加载上面BOOT-INF/lib里面所依赖的包,并且通过反射Manifest里面的Start-Class里面定义的类,然后invoke这个类里面的main方法。

war文件结构

example.war
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-WEB-INF
    +-classes
    |  +-com
    |     +-mycompany
    |        +-project
    |           +-YourClasses.class
    +-lib
    |  +-dependency1.jar
    |  +-dependency2.jar
    +-lib-provided
       +-servlet-api.jar
       +-dependency3.jar

同样的,当用spring-boot来运行一个war包时,应当把依赖包放到WEB-INF/lib目录。然后对于应用程序依赖的jar,但传统的web container会提供的JAR,但需要把它们放到WEB-INF/lib-provided。这样就可以以下面的方式来启动这个war了: jar -jar example.war。

下面还有就是用自动配置的方式打包为jar包了,现在还不太熟悉,以后再写吧~


猜你喜欢

转载自blog.csdn.net/qq_38217873/article/details/80722957