非springboot项目IDEA打包引入第三方jar包

写了一个maven项目,需要引入两个外部jar包,本地引入后正常运行,在打包时就遇到了问题,必需把工程依赖的jar包也一起打包。

如果是springboot项目打包是很好打的,附上一篇链接:https://blog.csdn.net/dongxiexiaoadou/article/details/106872047?spm=1001.2014.3001.5501

非springboot项目:

1、使用maven-shade-plugin

使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。

我这里使用的是另外的一个插件来进行打包,插件名称为:maven-shade-plugin,shade插件打包时在对spring.schemas文件处理上,它能够将所有jar里的spring.schemas文件进行合并,在最终生成的单一jar包里,spring.schemas包含了所有出现过的版本的集合,要使用shade插件,必须在pom进行如下配置:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-shade-plugin</artifactId>
   <version>2.4.1</version>
   <executions>
       <execution>
           <phase>package</phase>
           <goals>
               <goal>shade</goal>
           </goals>
           <configuration>
               <artifactSet>
                   <excludes combine.self="override" />
               </artifactSet>
               <filters>
                   <filter>
                       <artifact>*:*</artifact>
                       <excludes>
                           <exclude>META-INF/*.SF</exclude>
                           <exclude>META-INF/*.DSA</exclude>
                           <exclude>META-INF/*.RSA</exclude>
                       </excludes>
                   </filter>
               </filters>
               <transformers>
                   <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                       <resource>reference.conf</resource>
                   </transformer>
                   <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                       <mainClass>main.MainClass</mainClass>
                   </transformer>
               </transformers>
           </configuration>
       </execution>
   </executions>
</plugin>

本地运行时第三方jar包是放在resources下面的,在pom文件中引入正确的路径即可,打包成功如下图:
在这里插入图片描述
然后就可以在target里看见你打好的jar包了,以为万事大吉,结束了。
然后放进Linux环境下,用java -jar运行发现还是找不到引入的第三方jar包里的文件

在这里插入图片描述
用压缩软件打开target里的这个jar包,发现根目录和lib下都有引入的第三方jar包
在这里插入图片描述
在这里插入图片描述

2、 于是乎又找了别的解决方法
打开File–Project Structure–Artifacts如下图:
点击加号添加jar,选择第二个
在这里插入图片描述

在这里插入图片描述
把自己要用的第三方jar放进来,设置好路径,点击apply,ok就可以了。

然后我们需要bulid一下。
在这里插入图片描述
在这里插入图片描述

然后我们就可以在自己设置的路径下面看到一个jar文件
在这里插入图片描述
但是这个jar是不能运行的,可以自己试试

3、目前有两个jar文件,一个是Artifacts下生成,一个是maven插件生成

用压缩软件打开两个jar文件,对比可以看到,第2步Artifacts下生成的jar包当中,第三方jar包被打散了与原来的一些依赖包和在一起了
在这里插入图片描述

在这里插入图片描述
于是就想Artifacts下生成的jar包里的这个com文件包齐全
然后使用maven-shade-plugin打的包可以运行,但是缺少第三方jar包

如果他们两个能融合一下就好了,好了,好了

4、融合jar包

就尝试一下。

使用maven-shade-plugin打包时,生成了一个META-INF文件。如下图:
在这里插入图片描述

---------------------------分割线--------------------------------
META-INF 的作用
官方一点的说法:META-INF 相当于一个信息包,目录中的文件和目录获得 Java 2 平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在打包时自动生成。

简单的说法:就是存储了项目的元信息,其中文件manifest.mf仅此一份,描述了程序的基本信息、Main-Class的入口、jar依赖路径Class-Path
---------------------------分割线--------------------------------

如果要融合jar包的话,这个META-INF必须保留

从target下面的jar包里拿出来META-INF,其余的文件全部从Artifacts下生成的jar包里拿。

这样就重新生成了一个jar包。

拿去Linux下运行了一下,还行。

过程很麻烦,结果很不错。

欢迎提供更好的解决方法的链接地址!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值