我介紹的方法是使用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文件

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

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sxd.util</groupId> <artifactId>QR_Code</artifactId> <version>1.1-SNAPSHOT</version> <dependencies> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> </dependency> <!-- google提供二維碼生成和解析https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId> maven-assembly-plugin </artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.sxd.util.QR_Code</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
=============================================================================================================================================
【解釋一下,直接使用的可以跳過】:
》》(1)打包出來的jar包,是以
<groupId>com.sxd.util</groupId> <artifactId>QR_Code</artifactId> <version>1.1-SNAPSHOT</version>
{artifactId}-{version}.jar命名的
》》(2)maven-assembly-plugin插件中
默認情況下,maven-assembly-plugin內置了幾個可以用的assembly descriptor:
- bin : 類似於默認打包,會將bin目錄下的文件打到包中
- jar-with-dependencies : 會將所有依賴都解壓打包到生成物中【本次需求正好是將所有依賴也打包】
- src :只將源碼目錄下的文件打包
- project : 將整個project資源打包
》》(3)針對於maven-assembly-plugin插件中的
===================================================================================================================================================
3.使用IDEA的同志們,雙擊插件 即可執行打包指令
執行完整的語句如下:

"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 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building QR_Code 1.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-assembly-plugin:2.2-beta-5:assembly (default-cli) > package @ QR_Code >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ QR_Code --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ QR_Code --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to G:\ideaProjects\B\sxdproject\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ QR_Code --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory G:\ideaProjects\B\sxdproject\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ QR_Code --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ QR_Code --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ QR_Code --- [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT.jar [INFO] [INFO] --- maven-assembly-plugin:2.2-beta-5:single (make-assembly) @ QR_Code --- [INFO] META-INF/MANIFEST.MF already added, skipping [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT-jar-with-dependencies.jar [INFO] META-INF/MANIFEST.MF already added, skipping [INFO] [INFO] <<< maven-assembly-plugin:2.2-beta-5:assembly (default-cli) < package @ QR_Code <<< [INFO] [INFO] --- maven-assembly-plugin:2.2-beta-5:assembly (default-cli) @ QR_Code --- [INFO] META-INF/MANIFEST.MF already added, skipping [INFO] Building jar: G:\ideaProjects\B\sxdproject\target\QR_Code-1.1-SNAPSHOT-jar-with-dependencies.jar [INFO] META-INF/MANIFEST.MF already added, skipping [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.319 s [INFO] Finished at: 2018-02-01T16:30:47+08:00 [INFO] Final Memory: 23M/258M [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
4.執行完成之后,項目結構會發生變化
5.把jar包拷出來,放在一個位置,就可以上傳到nexus上,放在maven私服里,給大家引用了【nexus私服搭建以及相關操作,查看http://www.cnblogs.com/sxdcgaq8080/p/7583767.html】
當然,想更改jar的名字,也可以直接修改完成之后再進行如下操作
打開DOM窗口,執行如下命令
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
在http://localhost:8081/ 訪問nexus
查詢就可查看到
這樣在項目中引用如下:
<!--QR_Code二維碼使用工具包--> <dependency> <groupId>sxd.jar</groupId> <artifactId>QR_Code</artifactId> <version>1.1</version> </dependency>
6.最后,就可以把這個單獨創建的項目 刪除就好了
END
=========================================
參考地址:https://www.cnblogs.com/f-zhao/p/6929814.html