Maven打包jar(lib目录分离和不分离)的两种方式

 更新时间:2024年07月30日 09:56:03   作者:成为大佬先秃头  
打包jar的方式有很多种,本文主要介绍了Maven打包jar的两种方式,包含lib目录分离和不分离,具有一定的参考价值,感兴趣的可以了解一下

前言

Jar文件(Java归档,英语:Java Archive)是一种软件包文件格式,以流行的 ZIP 文件格式为基础。不仅用于压缩和发布,还用于部署和封装库、组件和插件程序以便开发Java平台应用软件或库。

背景需求

打包jar的方式有很多种:比如通过jar命令去打包,包括现在市面上常用的java开发工具idea、eclipse等,都集成了打包方法,只需配置一下即可(有需要自行上网了解),后来学习web开发接触maven,又开始用maven进行打包,只需install一下很方便,下面将网上五花八门(看的头晕)的maven配置结合我实际开发需求介绍两种打包方式

Maven打包jar与lib依赖包不分离

打包插件用的是spring-boot-maven-plugin,这个插件会把项目中的代码和相关依赖一起打包成一个jar包,我们只需哪到这个jar包发布到服务器上即可,很方便。但是jar包里面包含特别多的其他依赖,所以每次更新服务器jar包,特别费时间。

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!--指定jar程序入口-->
					<mainClass>com.baidu.test.App</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>

配置好后,可以通过mvn install命令或者找到开发软件上的maven工作栏找到你要编译的项目点击install即可,然后找到你项目目录找到target文件夹打开,里面就有你刚刚打包好的jar包,50多M,很大。

在这里插入图片描述

我们可以通过压缩工具查看jar包的文件目录,找到BOOT-INF下lib目录,可以看到里面有很多依赖包,然后其他的文件就是一些class文件和配置文件

在这里插入图片描述

Maven打包jar与lib依赖包分离

为了解决jar包太打不方便发布的问题,就把jar包中的依赖和jar包分离开,在发布时如果依赖包没啥变动,就只需要发布jar包即可,这样发布速度便能优化不少

<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<archive>
						<manifest>
						    <!-- 是否要把第三方jar加入到类构建路径 -->
							<addClasspath>true</addClasspath>
							<!-- 外部依赖jar包的最终位置 -->
							<classpathPrefix>lib/</classpathPrefix>
							<!--指定jar程序入口-->
							<mainClass>com.baidu.test.App</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<!--拷贝依赖到jar外面的lib目录-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<!-- 拷贝项目依赖包到lib/目录下 -->
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
							<overWriteReleases>false</overWriteReleases>
							<overWriteSnapshots>false</overWriteSnapshots>
							<overWriteIfNewer>true</overWriteIfNewer>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

配置好后,可以通过mvn install命令或者找到开发软件上的maven工作栏找到你要编译的项目点击install即可,然后找到你项目目录找到target文件夹打开,里面就有你刚刚打包好的jar包和lib文件,此时jar包只有10几kb,特别小,上传速度更快了

在这里插入图片描述

我们再通过压缩工具查看jar包的文件目录,BOOT-INF目录已经没有了,就是一些class文件和配置文件

在这里插入图片描述

到此这篇关于Maven打包jar(lib目录分离和不分离)的文章就介绍到这了,更多相关Maven打包jar内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java多种获取项目路径下的文件方式

    Java多种获取项目路径下的文件方式

    文章介绍了在Java项目中获取resources文件夹下文件的InputStream的多种方法,包括使用类加载器、上下文类加载器、系统属性和Paths类
    2024-12-12
  • java实现MD5加密方法汇总

    java实现MD5加密方法汇总

    本文给大家汇总介绍了2种java实现MD5加密的方法,非常的实用,这里分享给大家,学习下其中的思路,对大家学习java非常有帮助。
    2015-10-10
  • Java性能调优及排查方式

    Java性能调优及排查方式

    这篇文章主要介绍了Java性能调优及排查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解Java多线程和IO流的应用

    详解Java多线程和IO流的应用

    这篇文章主要介绍了详解Java多线程和IO流的应用,无论是本地文件复制,还是网络多线程下载,对于流的使用都是一样的,需要的朋友可以参考下
    2023-04-04
  • JUnit4 Hamcrest匹配器常用方法总结

    JUnit4 Hamcrest匹配器常用方法总结

    这篇文章主要介绍了JUnit4 Hamcrest匹配器常用方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java实现Img与PDF相互转换

    java实现Img与PDF相互转换

    这篇文章主要为大家详细介绍了java实现Img与PDF相互转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Java中的迭代器和foreach原理

    Java中的迭代器和foreach原理

    这篇文章主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-09-09
  • Java使用okhttp3发送请求的实现示例

    Java使用okhttp3发送请求的实现示例

    OkHttp3是一个高效的HTTP客户端,支持HTTP/2、GZIP压缩、响应缓存和异步/同步请求,本文就来介绍一下Java使用okhttp3发送请求的实现示例,感兴趣的可以了解一下
    2025-12-12
  • Spring AOP实现Redis缓存数据库查询源码

    Spring AOP实现Redis缓存数据库查询源码

    这篇文章主要介绍了Spring AOP实现Redis缓存数据库查询的相关内容,源码部分还是不错的,需要的朋友可以参考下。
    2017-09-09
  • vue+springboot上传文件、图片、视频及回显到前端详解

    vue+springboot上传文件、图片、视频及回显到前端详解

    一般来说vue可以使用axios或者fetch等ajax库发送文件请求,而springboot则可以使用Spring MVC的方式来处理上传文件请求,下面这篇文章主要给大家介绍了关于vue+springboot上传文件、图片、视频及回显到前端的相关资料,需要的朋友可以参考下
    2023-04-04

最新评论