这两天在对接向日葵远程控制功能,需要把控制端和被控制端 的SDK集成到同一个项目中,但是由于两个Jar包里面包含着相同的包名+文件


这两个Jar包下都有相同的class,向日葵对接文档中说是要删除其中一个Jar包的class文件,并重新打包即可。经过多次尝试确实可行
如何删除class文件,因为我们不涉及到修改Jar包中的代码,只是删除文件,只需要将Jar包解压,然后将对应的重复文件删除就行
重点是如何再将剩下的class打成jar包,直接压缩是肯定不行的。在Jdk 中 有个命令叫 jar

看下面的两个示例应该了解的差不多
首先将目录定位到刚才解压开的文件夹

不要进入到里面

还有一点需要注意的是 一个Jar包有都会有一个清单文件,他在 META-INF 文件夹中 叫做 MANIFEST.MF
他自己的Jar包会带一个清单文件, 我们一会自己生成的Jar包也会有一个文件,注意的是如果这两个清单文件生成的目录相同那就万事大吉,但是如果我们自己生成的清单和他自己Jar包中的清单不在同一个目录那就会报错
(忽略这个文件夹的名字)

只需要将Jar包剪切到这个地方就好了,接下来就是使用命令直接打包

jar cvfm classes.jar C:\Users\用户名\Desktop\testJar\sunlogincontrol-1.4\META-INF\MANIFEST.MF -C sunlogincontrol-1.4\ .
解释一下命令的组成部分
-
jar cvfm
命令 用来生成 Jar包 - classes.jar 新Jar包的名称
- 原清单文件的路径
- -C sunlogincontrol-1.4\ . 表示指定目录 sunlogincontrol-1.4 文件下所有的文件,最后那个 . 表示所有的文件

最后生成 的文件

有其他想法的或者有疑问的可以联系我 173404236@qq.com
网友评论