将多个jar包重新打包成一个jar包

分手后的思念是犯贱 2021-10-26 13:24 1308阅读 0赞

我介绍的方法是使用java命令来操作的,所以首先的安装jdk,这个就自己搞定吧.

提取jar包
为了将多个jar包打包成一个jar包,首先要将每个jar包的内容提取出来放到一个文件夹下,具体的操作命令就是使用jar xf jar的文件名
比如我的jar放到桌面的一个新建文件夹(2)下,那么就通过cmd进入到这个目录然后输入上面的命令即可

重新打包jar包
也是通过cmd进入到要打包的文件夹目录下,通过jar cf 新的jar包名 要被打包的文件夹名

如上图的命令就是将 com文件夹打包成一个my.jar

将多个文件夹打包成jar包
通过cmd进入到要打包的文件夹目录下,通过jar cf 新的jar包名 要被打包的文件夹名 要被打包的文件夹名, 就是将多个文件夹名都写在后面即可

如上图就是将com和cn 两个文件夹一起打包成my.jar

切记重新打包成jar包时 原来jar的路径名不能修改,且不能重复否则在编译的时候会报异常,具体的可以参考我的上一篇文章Android studio编译报错:Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’

-——————————
作者:totcw
来源:CSDN
原文:https://blog.csdn.net/totcw/article/details/72723627
版权声明:本文为博主原创文章,转载请附上博文链接!

https://www.cnblogs.com/sxdcgaq8080/p/8399854.html

之前有一片文章,是打包单个java文件的。这次想要将http://www.cnblogs.com/sxdcgaq8080/p/8398780.html 打包成jar包,发现这个java文件中引用了多个第三方的jar,想要单独进行编译都无法通过,更不要说打包成jar了。

所以就营运而生了这个需求,怎么打包单个java文件或多个java文件,将文件中引用的依赖的jar包共同打包成一个jar供别的项目引用。

本次本篇使用的工具是Maven中的

maven-assembly-plugin

插件。

======================================================================================================

1.首先,需要新建一个maven项目,将单个或多个java文件拷贝到本项目中

例如,下面这个QR_Code.java文件

ContractedBlock.gif

978388-20180201161846328-848638468.png

2.完善pom.xml文件,除了项目中依赖的jar的引用,还需要maven-assembly-plugin插件

ExpandedBlockStart.gif

复制代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.sxd.util</groupId>
  7. <artifactId>QR_Code</artifactId>
  8. <version>1.1-SNAPSHOT</version>
  9. <dependencies>
  10. <!--lombok-->
  11. <dependency>
  12. <groupId>org.projectlombok</groupId>
  13. <artifactId>lombok</artifactId>
  14. <version>1.16.20</version>
  15. </dependency>
  16. <!-- google提供二维码生成和解析https://mvnrepository.com/artifact/com.google.zxing/core -->
  17. <dependency>
  18. <groupId>com.google.zxing</groupId>
  19. <artifactId>core</artifactId>
  20. <version>3.3.2</version>
  21. </dependency>
  22. </dependencies>
  23. <build>
  24. <plugins>
  25. <plugin>
  26. <artifactId>maven-compiler-plugin</artifactId>
  27. <version>3.7.0</version>
  28. <configuration>
  29. <source>1.8</source>
  30. <target>1.8</target>
  31. </configuration>
  32. </plugin>
  33. <plugin>
  34. <artifactId> maven-assembly-plugin </artifactId>
  35. <configuration>
  36. <descriptorRefs>
  37. <descriptorRef>jar-with-dependencies</descriptorRef>
  38. </descriptorRefs>
  39. <archive>
  40. <manifest>
  41. <mainClass>com.sxd.util.QR_Code</mainClass>
  42. </manifest>
  43. </archive>
  44. </configuration>
  45. <executions>
  46. <execution>
  47. <id>make-assembly</id>
  48. <phase>package</phase>
  49. <goals>
  50. <goal>single</goal>
  51. </goals>
  52. </execution>
  53. </executions>
  54. </plugin>
  55. </plugins>
  56. </build>
  57. </project>

复制代码

=============================================================================================================================================

【解释一下,直接使用的可以跳过】:

》》(1)打包出来的jar包,是以

  1. <groupId>com.sxd.util</groupId>
  2. <artifactId>QR_Code</artifactId>
  3. <version>1.1-SNAPSHOT</version>

{artifactId}-{version}.jar命名的

》》(2)maven-assembly-plugin插件中

978388-20180201162259203-891264515.png

默认情况下,maven-assembly-plugin内置了几个可以用的assembly descriptor:

  • bin : 类似于默认打包,会将bin目录下的文件打到包中
  • jar-with-dependencies : 会将所有依赖都解压打包到生成物中【本次需求正好是将所有依赖也打包】
  • src :只将源码目录下的文件打包
  • project : 将整个project资源打包

》》(3)针对于maven-assembly-plugin插件中的

978388-20180201162610218-1975074457.png

===================================================================================================================================================

3.使用IDEA的同志们,双击插件 即可执行打包指令

978388-20180201163044671-191808839.png

978388-20180201163126859-949927741.png

执行完整的语句如下:

ExpandedBlockStart.gif

复制代码

  1. "C:\Program Files\Java\jdk1.8.0_131\bin\java" -Dmaven.multiModuleProjectDirectory=G:\ideaProjects\B\sxdproject -Dmaven.home=C:\Users\SXD\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.3727.127\plugins\maven\lib\maven3 -Dclassworlds.conf=C:\Users\SXD\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.3727.127\plugins\maven\lib\maven3\bin\m2.conf -javaagent:C:\Users\SXD\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.3727.127\lib\idea_rt.jar=58262:C:\Users\SXD\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.3727.127\bin -Dfile.encoding=UTF-8 -classpath C:\Users\SXD\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.3727.127\plugins\maven\lib\maven3\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version=2017.3 org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:assembly
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] ------------------------------------------------------------------------
  5. [INFO] Building QR_Code 1.1-SNAPSHOT
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO]
  8. [INFO] >>> maven-assembly-plugin:2.2-beta-5:assembly (default-cli) > package @ QR_Code >>>
  9. [INFO]
  10. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ QR_Code ---
  11. [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
  12. [INFO] Copying 0 resource
  13. [INFO]
  14. [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ QR_Code ---
  15. [INFO] Changes detected - recompiling the module!
  16. [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
  17. [INFO] Compiling 1 source file to G:\ideaProjects\B\sxdproject\target\classes
  18. [INFO]
  19. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ QR_Code ---
  20. [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
  21. [INFO] skip non existing resourceDirectory G:\ideaProjects\B\sxdproject\src\test\resources
  22. [INFO]
  23. [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ QR_Code ---
  24. [INFO] Nothing to compile - all classes are up to date
  25. [INFO]
  26. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ QR_Code ---
  27. [INFO] No tests to run.
  28. [INFO]
  29. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ QR_Code ---
  30. [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT.jar
  31. [INFO]
  32. [INFO] --- maven-assembly-plugin:2.2-beta-5:single (make-assembly) @ QR_Code ---
  33. [INFO] META-INF/MANIFEST.MF already added, skipping
  34. [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT-jar-with-dependencies.jar
  35. [INFO] META-INF/MANIFEST.MF already added, skipping
  36. [INFO]
  37. [INFO] <<< maven-assembly-plugin:2.2-beta-5:assembly (default-cli) < package @ QR_Code <<<
  38. [INFO]
  39. [INFO] --- maven-assembly-plugin:2.2-beta-5:assembly (default-cli) @ QR_Code ---
  40. [INFO] META-INF/MANIFEST.MF already added, skipping
  41. [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT-jar-with-dependencies.jar
  42. [INFO] META-INF/MANIFEST.MF already added, skipping
  43. [INFO] ------------------------------------------------------------------------
  44. [INFO] BUILD SUCCESS
  45. [INFO] ------------------------------------------------------------------------
  46. [INFO] Total time: 3.319 s
  47. [INFO] Finished at: 2018-02-01T16:30:47+08:00
  48. [INFO] Final Memory: 23M/258M
  49. [INFO] ------------------------------------------------------------------------
  50. Process finished with exit code 0

复制代码

4.执行完成之后,项目结构会发生变化

978388-20180201163232390-1370138439.png

5.把jar包拷出来,放在一个位置,就可以上传到nexus上,放在maven私服里,给大家引用了【nexus私服搭建以及相关操作,查看http://www.cnblogs.com/sxdcgaq8080/p/7583767.html】

978388-20180201163529265-1365447822.png

当然,想更改jar的名字,也可以直接修改完成之后再进行如下操作

打开DOM窗口,执行如下命令

  1. mvn deploy:deploy-file -DgroupId=sxd.jar -DartifactId=QR_Code -Dversion=1.1 -Dpackaging=jar -Dfile=G:\test\QR_Code-1.1-SNAPSHOT.jar -Durl=http://localhost:8081/repository/myself_hosted/ -DrepositoryId=myself_hosted

978388-20180201163659968-2115044063.png

在http://localhost:8081/ 访问nexus

查询就可查看到

978388-20180201164013812-304207200.png

这样在项目中引用如下:

  1. <!--QR_Code二维码使用工具包-->
  2. <dependency>
  3. <groupId>sxd.jar</groupId>
  4. <artifactId>QR_Code</artifactId>
  5. <version>1.1</version>
  6. </dependency>

6.最后,就可以把这个单独创建的项目 删除就好了

END

=========================================

参考地址:https://www.cnblogs.com/f-zhao/p/6929814.html

转载于:https://www.cnblogs.com/yuluoxingkong/p/11262210.html

发表评论

表情:
评论列表 (有 0 条评论,1308人围观)

还没有评论,来说两句吧...

相关阅读