idea打包jar的多种方式,依赖解决方式
idea打包jar的多种方式
依赖解决方式
https://www.cnblogs.com/dinghong-jo/p/7873646.html
这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式:
- 用IDEA自带的打包形式
- 用Maven插件
maven-shade-plugin
打包 - 用Maven插件
maven-assembly-plugin
打包
用IDEA自带的打包方式:
打开IDEA的file -> Project Structure
,进入项目配置页面。如下图:
点击Artifacts
,进入Artifacts
配置页面,点击 + ,选择如下图的选项。
进入Create JAR from Modules
页面,按照如下图配置。
- 第一步选择Main函数执行的类。
- 第二步选择如图的选项,目的是对第三方Jar包打包时做额外的配置,如果不做额外的配置可不选这个选项(但不保证打包成功)
- 第三步需要在
src/main
目录下,新建一个resources
目录,将MANIFEST.MF
文件保存在这里面,因为如果用默认缺省值的话,在IDEA12版本下会有bug。
点击OK
之后,出现如下图界面,右键点击<output root>
,点击Create Directory
,创建一个libs
,将所有的第三方JAR放进libs目录下。
成功之后,如下图所示:
放入之后,点击我们要打成的jar的名字,这里面是kafka-cps.jar
,选择classpath进行配置。
编辑的结果如下:
这里将所有的jar都写在libs/
里面。点击OK
,回到配置页面。
同时还注意在配置页面,勾选build on make
最后点击配置页面的OK
,完成配置。回到IDEA,点击Build->Build Artifacts
,选择build
就会生成我们需要的jar包。其位置在项目目录的out目录下/out/artifacts/kafka_cps_jar
。
下面放一个正确配置的清单文件内容
用maven-shade-plugin打包
上面的打包过程实在是过于的繁琐,而且也没有利用到maven管理项目的特色。为此,我们这里利用maven中的maven-shade-plugin
插件。在pom.xml
中,我们加入如下的信息来加入插件。
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>1.4</version><configuration><createDependencyReducedPom>true</createDependencyReducedPom></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>Main.Main</mainClass></transformer></transformers></configuration></execution></executions></plugin>
这里面配置了一个`configuration`标签内容,在此标签下面 有一个transformer
标签,用来配置Main函数的入口( <mainClass>Main.Main</mainClass>
),当然此标签内容很复杂,不是上面写的那么简单,上面之所以如此简单,是因为在所有类中(包括第三方Jar)只有一个Main方法。如果第三方jar中有Main方法,就要进行额外的配置,上面这么配置,不一定能执行成功。
具体可以参见maven插件。
在加入这段代码到pom.xml之后,我们就可以用maven的命令去打包了。其指令如下:
mvn clean compile //清除之前target编译文件并重新编译
mvn clean package //对项目进行打包(因为配置过插件,所以jar包是可执行的)
mvn clean install //安装项目,然后就可以使用了
然后通过java -jar cps-1.0-SNAPSHOT.jar
运行。
如果使用IDEA的话,可以通过自带的maven管理工具代替执行上面的命令。如下图所示,依次点击蓝色的部分。
用maven-assembly-plugin打包
上面的方法,我们还需要点击很多命令去打包。这次利用一个新的插件,可以打包更简单。同样,在pom.xml中加入如下代码。上文的maven-shade-plugin
插件代码可以删除。最好不要写2个插件代码。
<plugin><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>Main.Main</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin>
这里同样配置了一个manifest标签来配置Main函数的入口。然后通过如下指令来实现打包。
mvn assembly:assembly
如果使用IDEA的话,可以通过自带的maven管理工具代替执行上面的命令。如下图所示,点击蓝色的部分。
然后通过执行java -jar cps-1.0-SNAPSHOT-jar-with-dependencies.jar
运行。
idea打包jar的多种方式,依赖解决方式相关推荐
- JS 模块化: CommonJS 与 ESM(ECMAScript Module) 的引用机制比较 循环依赖解决方式
JS 模块化: CommonJS 与 ESM(ECMAScript Module) 的引用机制比较 & 循环依赖解决方式 文章目录 JS 模块化: CommonJS 与 ESM(ECMAScr ...
- Intellij IDEA 打包jar的多种方式
IDEA打包jar包的多种方式 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-assembly-plugin打包 用IDEA自带的打包 ...
- 使用HbuilderX 的UNIapp开发app, 打包后定位不能使用的解决方式
情况描述:使用真机调试时,手机定位正常,打包发布以后定位功能显示:无法获取位置等信息 解决办法: 1.在Hbuilder中项目的mainfast.json中权限模块中选择上位置相关的 2.配置地图信息 ...
- 黑帽技术以及百度惩罚网站的原因和方式以及解决方式
问题1:什么是黑帽SEO,哪些属于黑帽技术? 1.站群手段 这个是当今用的最多的一种黑帽手段,因为这种做法非常的简单,一位新手稍微懂得原理就可以做到了,建设成本又低,一个服务器,一个域名就可以做站群了 ...
- android服务器打包jar,Android Studio打包apk,aar,jar包方法
文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...
- mysql数据库死锁检测_数据库死锁检测和解决方式
做性能测试或者线上环境并发量比较大的时候经常出现数据库死锁的情况,下面介绍几种数据库死锁的检测方式和解决方式.都是采用sql命令实现的.如果不用命令行也可以通过查看数据库服务器的日志信息进行死锁检测, ...
- 关于IDEA maven工程打jar包无法引入手动导入的jar包问题的解决方式
关于IDEA maven工程打jar包无法引入手动导入的jar包问题的解决方式 昨天在完成一个模块的编写后,要将项目打成jar包后发给测试人员,但是有一个手动引入的jar包一直出现找不到程序包的错误, ...
- Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决
本文主要是分析Spring bean的循环依赖,以及Spring的解决方式. 通过这种解决方式,我们可以应用在我们实际开发项目中. 什么是循环依赖? 怎么检测循环依赖 Spring怎么解决循环依赖 S ...
- 【maven】maven jar 包 冲突 的解决方式
1.概述 视频参考:maven jar 包 冲突 的解决方式 此处文章参考:Mvn : Maven的依赖管理 依赖冲突 解决思路
最新文章
- 一个包从服务器到达客户端
- Boost:bind绑定的测试自定义占位符
- 容器学习 之 自定义容器网络(十三)
- 写出gradle风格的groovy代码
- Linux文件和目录权限
- 如何保证消息队列里的数据顺序执行?
- astrm30米分辨率高程数据下载_如何下载道路沿线1000米范围内的高程?
- ucenter词语过滤原理
- Java Web开发入门 - 第3章 Tomcat单元测试
- [转]使用 HTML5 索引型数据库的待办事项简要列表
- python3虚拟环境的设置
- WebCollector 简介与 快速入门
- effective C++ 条款 48:认识template元编程
- [Windows] PPT插件集,部分支持WPS(提高你的制作效率和页面美观)
- 华为技术专家深度解析Java线程状态
- PHP学习之GD库图像处理
- 人工智能进化史:从麦卡锡到“索菲亚” | 精选
- matlab 将矩阵变为一列,MATLAB中把一个矩阵转换为一列
- 2018年六级第三套自行车翻译
- Latex最后一页文本或参考文献左右对齐(平衡)