SpringBoot打Jar包后,在windows或Linux环境下直接运行

1、SpringBoot简介

     对于我们Java开发工程师来说,最熟悉的莫过于SSH,SSM框架了,这些都是曾经开发Web项目的重要技术,但是我们在开发这些项目时,却难免遇到一个很令人繁琐的事情,那就是配置文件太多了,基本每个框架都需要配置自己的XML文件,以供项目启动时,读取这些配置文件,注入所需的实例和初始属性;此外,我们写的这些项目最后还要部署到Tomcat,Jetty这些服务器容器中,才能成功运行。

   因此,为了简化这一系列的繁琐情况,SpringBoot技术应用而生,其核心思想便是精简配置,全部使用注解进行高效开发,目前SpringBoot最新的时2.X版本了,每个版本都会有所差别的,网上讲解这方面的知识很多,但是讲解部署却很少,同时大部分讲解的部署也都是打War包再部署到Tomcat中运行,可这又违反了SpringBoot的初衷,因此我们可以直接打一个Jar包直接使用Java最初的命令java -jar XXX.jar的命令运行,是不是很神奇?

 

2、为什么可以直接打Jar包运行?

    首先,我们在进行项目开发时,需要确保自己已经配置好了JDK(推荐JDK8+)以及Maven,或Ant或Gradle。

    这里,我们使用maven快速搭建一个项目,SpringBoot只需要一个pom.xml和一个application.properties(或application.yml)文件,pom.xml里面放的时所有依赖的Jar包,而application.properties里面可以存在所有的配置信息,以便进行部分属性的初始化。

    如果想使用SpringBoot进行开发,首先需要引入其Jar包的配置,以让其成为parent,以便让其顺带提供所有需要的基本依赖包。目前有两种引入方式

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.6.RELEASE</version>
    <relativePath/>
</parent>

 <dependencies>

        <!-- spring boot 官方相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!--......其他更多Jar依赖.......--->
    </dependencies>

上面时最简单的一种方式,也是最常用的一种方式,但是这种写法有一个很大的弊端,便是仅限于SpringBoot相关的依赖了,如果想要引入SpringCloud依赖,便要采取其他方式了:

<dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.0.6.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <denpendency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
        <version>2.0.6.RELEASE</version>
    </dependency>
    </dependencies>
</dependecyManagement>

    通过上面两者配置方式,我们可以很轻松的看出来,第一种配置方式,引入了<parent>然后下面的Jar包全部不用再次手动引入其<version>了,因此会受到<parent>影响而直接赋予了默认的初始版本,第二种方式则需要手动引入。

   回到我们最初的问题,它为什么不需要外部Tomcat容器便可以直接运行了呢?其原因在于,SpringBoot使用的嵌入式的Web容器,在我们引入:

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

    它其实默认引入了Tomcat的容器,如果想要更换为Jetty容器,则需要:

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
      		<exclusion>
      				<groupId>org.springframework.boot</groupId>
      				<artifactId>spring-boot-tomcat</artifactId>
      		</exclusion>
      </exclusions>
 </dependency>
 <dependency>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-jetty</artifactId>
 </dependency>

   这样,我们在点击项目main方法时,便会运行在嵌入式的Tomcat中了。

 

3、如何打包发布

    我们写项目的终究目的时发布到服务器上,因此我们需要进行打包,这里只说明Jar包的打包方式,

    <groupId>com.air</groupId>
    <artifactId>myproject</artifactId>
    <version>1.6</version>
    <packaging>jar</packaging>

    首先,需要更改的就是自己项目的描述信息中的<packaging>为jar,其次需要引入打包插件。

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            	<configuration>
            		<mainClass>com.air.StartApplication</mainClass>
            	</configuration>
            </plugin>
        </plugins>
        <finalName>MyProject</finalName>
 </build>

    然后,使用Eclipse的功能,右击项目,选择run as,然后选择Maven build...,在打开的对话框中输入clean package -X,

如上图,我们再勾选Debug Output, Skip Tests,稍等一段时间,便可以在该项目中的target目录下得到项目的jar包了。

然后将该Jar包直接放到我们的服务器上,运行java -jar xxx.jar即可,但是这样的话,一旦关闭窗口,服务运行就中断了,因此,我们可以使用如下命令,让其在后台一直运行:

nohup java -jar ./home/project/xxx.jar > ./home/project/system.log 2>& 1 &

4、可能遇到的BUG

首先,我们在项目的目录下,使用cmd命令行:

mvn dependency:tree>tree.txt

在该文件中,查看详细缺少的Jar包,如果缺失的Jar包较多,那么此时可能丢失的是一个大的Jar包(并且该Jar可能是一个pom),由于它的丢失导致其所有依赖都丢失。

此时,我们需要详细去Eclipse中查看丢失的时哪个Jar包或者方法,如果时Jar包,首先检查自己的本地仓库是否有该Jar包,若有,可能时已经出现问题了,直接删除后让Maven帮我们重新下载;如果没有,则可能时网络原因,我们可以去Maven Repository下载该Jar包,让后将其放到对应的本地库中,地址为:https://mvnrepository.com

如果丢失的时一个方法,此时我们不好查到它时哪个Jar包的,这里有个网址:https://search.maven.org/,点击“Classic Search”链接,然后选择“Advanced Search”输入我们的方法名即可,获得其归属。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值