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

摘要:
因此,这一需求源于运营。如何打包单个java文件或多个java文件,并将文件中引用的依赖jar包打包到一个jar中,供其他项目引用=========================================================================1。首先,您需要创建一个Maven项目,并将一个或多个java文件复制到项目中。例如,以下QR_代码。java文件ViewCode2.改进pom。xml文件。除了项目依赖的jar引用之外,还需要maven汇编插件˂?

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

将多个jar包重新打包成一个jar包第1张 View Code

将多个jar包重新打包成一个jar包第2张

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

将多个jar包重新打包成一个jar包第3张
复制代码
<?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插件中

将多个jar包重新打包成一个jar包第6张

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

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

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

将多个jar包重新打包成一个jar包第7张

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

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

将多个jar包重新打包成一个jar包第8张

将多个jar包重新打包成一个jar包第9张

执行完整的语句如下:

将多个jar包重新打包成一个jar包第3张
复制代码
"C:Program FilesJavajdk1.8.0_131injava" -Dmaven.multiModuleProjectDirectory=G:ideaProjectsBsxdproject -Dmaven.home=C:UsersSXDAppDataLocalJetBrainsToolboxappsIDEA-Uch-0173.3727.127pluginsmavenlibmaven3 -Dclassworlds.conf=C:UsersSXDAppDataLocalJetBrainsToolboxappsIDEA-Uch-0173.3727.127pluginsmavenlibmaven3inm2.conf -javaagent:C:UsersSXDAppDataLocalJetBrainsToolboxappsIDEA-Uch-0173.3727.127libidea_rt.jar=58262:C:UsersSXDAppDataLocalJetBrainsToolboxappsIDEA-Uch-0173.3727.127in -Dfile.encoding=UTF-8 -classpath C:UsersSXDAppDataLocalJetBrainsToolboxappsIDEA-Uch-0173.3727.127pluginsmavenlibmaven3ootplexus-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:ideaProjectsBsxdproject	argetclasses
[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:ideaProjectsBsxdprojectsrc	est
esources
[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:ideaProjectsBsxdproject	argetQR_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:ideaProjectsBsxdproject	argetQR_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:ideaProjectsBsxdproject	argetQR_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.执行完成之后,项目结构会发生变化

将多个jar包重新打包成一个jar包第13张

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

将多个jar包重新打包成一个jar包第14张

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

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

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

将多个jar包重新打包成一个jar包第15张

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

查询就可查看到

将多个jar包重新打包成一个jar包第16张

这样在项目中引用如下:

<!--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

免责声明:文章转载自《将多个jar包重新打包成一个jar包》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇etcd查看leader节点定位JAVA进程被kill的原因下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python——XPath提取某个标签下所有文本

/text()获取指定标签下的文本内容,//text()获取指定标签下的文本内容,包括子标签下的文本内容,比较简单的是利用字符串相加: room_infos = li.xpath('.//a[@class="resblock-room"]/span//text()').extract() room_info = '' for i in room_info...

Log4j 日志

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。Log4j是Apache基金会的一个项 目,Log4j是一个基于Java的日志组件,Log4j是Java的几个日志框架中的一种。日志记录器(Logger)是日志处理的核 心组件。log4j具有6种一般的日志级别(Level)。 日志记录器(Logg...

centos环境下安装FastDFS配置详解(包含配置nginx)

项目中使用了FastDFS作为文件系统,这里记录一下安装和配置过程,个人使用部署过程中耗费了好长时间和精力,遇到了很多的坑,总结成了一篇详细的部署文档,以备下次安装使用。 项目场景 由于是测试环境,所以只提供了一台服务器,后续软件的安装和配置都在这台服务器上完成。(IP:10.129.44.128) 1、安装gcc(编译时需要) FastDFS是C语言开发...

ROS学习笔记(一):自己动手写一个ROS程序

创建一个工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件、编译文件和执行文件。建立工作区的方法如下:   [plain] view plain copy  $ mkdir -p ~/catkin_ws/src   $ cd ~/catkin_ws/src   $ catkin_init_workspace ...

结对项目:一寸时光APP(日程管理)二

建立数据库 package com.example.myapplication3.db; import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLi...

C#实体是什么

实体 一般是指三层结构的数据库访问形式中,用于映射数据表或视图中一条记录的类的实例。例如现有数据表A 内涵 ID int(4) Info(nvarchar 50)两个字段,而有其对应的类 public class ModelA{private int id;privatestring info;public int ID{get{ return id;}s...