您的位置 首页 java

SpringBoot、SpringCloud等Java项目打包为可执行jar包的两种方式

目前,在实际的项目开发过程中,手动把我们的Springboot、 SpringCloud 项目打包为可执行jar包的场景确实不多了,但是有时候确实有这种需求的时候,还真的一下子想不起来要怎么做,所以在这里给大家介绍一下打包的方式。

有两种打包的方式:

  1. 项目运行依赖的所有 jar 都解析为class,打包进项目的可执行jar中
  2. 项目的可执行jar包和项目运行依赖的jar分开,项目运行依赖的jar都放进lib文件夹中,此时需要 注意的是 运行项目时,需要把可执行jar和lib放在同目录下。

本文用来举例子使用的是Springboot项目,名称为yl-nacos-provider,是在我的前面几篇文章中构建起来的。代码很简单,是Nacos服务注册与发现基本使用的Demo。如果有需要的话,请回看: 。当然,不回看之前的文章,我相信大家在阅读本文的内容时也不会有什么障碍。

简单说明一下yl-nacos-provider包含的内容:

  • 添加了在Nacos中注册服务
  • 提供了一个简单的 Controller 接口

关于这个项目的主要内容,我会在文章最后放上重点部分的截图和代码。

方式一:项目运行依赖的所有jar都解析为class,打包进项目的可执行jar中

pom .xml文件中添加如下代码:

 <plugin>
    <groupId>org.apache. Maven .plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
        < append AssemblyId>false</appendAssemblyId>
        <finalName>nacos-provider-0.0.1-SNAPSHOT</finalName>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <add classpath >true</addClasspath>
                <mainClass>orj.lirj.nacos.nacosprovider.NacosProviderApplication</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>assembly</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org. Spring framework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>  

特别说明:

finalName:需要改成你项目打包后的文件名称

mainClass:需要改成你项目的启动类

添加后完整的pom.xml文件代码如下:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="#34; xmlns:xsi="#34;
         xsi:schemaLocation=" #34;>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.yl.springcloudyldemo</groupId>
        <artifactId>spring-cloud-yl-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.yl.nacosprovider</groupId>
    <artifactId>yl-nacos-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>yl-nacos-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        < java .version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.yl.springcloudyldemocommon</groupId>
            <artifactId>spring-cloud-yl-demo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-5</version>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <finalName>yl-nacos-provider-0.0.1-SNAPSHOT</finalName>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>  

我们可以使用命令mvn package或者使用idea里右侧自带的Maven工具进行打包。

idea自带的Maven工具

打包后的jar在target目录下:

我们使用 java -jar yl-nacos-provider-0.0.1-SNAPSHOT.jar 命令启动打包好的jar包:

图1

图2

由于日志比较多,一张图截图不下,所以分了两张。出现图2标红部分,说明我们的项目启动成功了。

访问一下我们的Controller接口:localhost:9101/ylnacos/provider/hello?name=测试名称

方式二:项目的可执行jar包和项目运行依赖的jar分开,项目运行依赖的jar都放进lib文件夹中

在pom.xml文件中添加如下代码:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id> copy </id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>  

特别说明:

mainClass:需要改成你项目的启动类

添加后完整的pom.xml文件代码如下:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="#34; xmlns:xsi="#34;
         xsi:schemaLocation=" #34;>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.yl.springcloudyldemo</groupId>
        <artifactId>spring-cloud-yl-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.yl.nacosprovider</groupId>
    <artifactId>yl-nacos-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>yl-nacos-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.yl.springcloudyldemocommon</groupId>
            <artifactId>spring-cloud-yl-demo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>org.yl.nacosprovider.ylnacosprovider.YlNacosProviderApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  

我们可以使用命令mvn package或者使用idea里右侧自带的Maven工具(截图见方式一里)进行打包。

打包后的jar在target目录下:

在这种方式下,我们会发现,在target下出现了一个lib的文件夹。

特别说明: 我们的jar的运行离不开这个lib文件夹,我们必须把我们的jar和这个lib放在同一级目录下才可以。

我们使用 java -jar yl-nacos-provider-0.0.1-SNAPSHOT.jar 命令启动打包好的jar包。

访问一下我们的Controller接口:localhost:9101/ylnacos/provider/hello?name=测试名称222

报错说明:

  • 在方式一中,需要在pom中图3的代码,如果没有的话,会报图4的错误

图3

图4

yl-nacos-provider重点代码截图

  • Controller接口:

  • application.yml配置文件:

  • 启动类:

如有问题或者其它方式,欢迎大家评论区告诉我,谢谢!

文章来源:智云一二三科技

文章标题:SpringBoot、SpringCloud等Java项目打包为可执行jar包的两种方式

文章地址:https://www.zhihuclub.com/191855.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图