利用MAVEN打包可运行jar包,包括依赖的第三方包
转载自:http://bglmmz.iteye.com/blog/2058914
背景:
另一篇文章说了如何利用IDEA来打包,现在来说说如何利用MAVEN打包
目标:应用本身打成一个jar包,依赖的第三方包放到lib目录下
开发环境
OS: Windows 8.1
JDK: 1.7.0
开发工具: IntelliJ IDEA 13.1.1
步骤:
1. 首先看下maven项目的标准目录结构:

2. 看下项目pom.xml的配置,首先要配置maven-jar-plugin,把自己的代码编译打包成jar文件,然后配置maven-assembly-plugin,把整个项目打包成一个发布包。
- <build>
- <plugins>
- <!-- The configuration of maven-jar-plugin -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
- <!-- The configuration of the plugin -->
- <configuration>
- <!-- Configuration of the archiver -->
- <archive>
- <!--
- 生成的jar中,不要包含pom.xml和pom.properties这两个文件
- -->
- <addMavenDescriptor>false</addMavenDescriptor>
- <!-- Manifest specific configuration -->
- <manifest>
- <!--
- 是否要把第三方jar放到manifest的classpath中
- -->
- <addClasspath>true</addClasspath>
- <!--
- 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/
- -->
- <classpathPrefix>lib/</classpathPrefix>
- <!--
- 应用的main class
- -->
- <mainClass>dbRobot.BeanRobot</mainClass>
- </manifest>
- </archive>
- <!--
- 过滤掉不希望包含在jar中的文件
- -->
- <excludes>
- <exclude>${project.basedir}/xml/*</exclude>
- </excludes>
- </configuration>
- </plugin>
- <!-- The configuration of maven-assembly-plugin -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.4</version>
- <!-- The configuration of the plugin -->
- <configuration>
- <!-- Specifies the configuration file of the assembly plugin -->
- <descriptors>
- <descriptor>src/main/assembly/package.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
3. 再来看package.xml的配置
- <assembly>
- <id>bin</id>
- <!-- 最终打包成一个用于发布的zip文件 -->
- <formats>
- <format>zip</format>
- </formats>
- <!-- Adds dependencies to zip package under lib directory -->
- <dependencySets>
- <dependencySet>
- <!--
- 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录
- -->
- <useProjectArtifact>false</useProjectArtifact>
- <outputDirectory>lib</outputDirectory>
- <unpack>false</unpack>
- </dependencySet>
- </dependencySets>
- <fileSets>
- <!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
- <fileSet>
- <directory>${project.basedir}</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>README*</include>
- <include>LICENSE*</include>
- <include>NOTICE*</include>
- </includes>
- </fileSet>
- <!-- 把项目的配置文件,打包进zip文件的config目录 -->
- <fileSet>
- <directory>${project.basedir}\src\main\config</directory>
- <outputDirectory>config</outputDirectory>
- <includes>
- <include>*.xml</include>
- <include>*.properties</include>
- </includes>
- </fileSet>
- <!-- 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 -->
- <fileSet>
- <directory>${project.build.scriptSourceDirectory}</directory>
- <outputDirectory></outputDirectory>
- <includes>
- <include>startup.*</include>
- </includes>
- </fileSet>
- <!-- 把项目的脚本文件(除了启动脚本文件),打包进zip文件的script目录 -->
- <fileSet>
- <directory>${project.build.scriptSourceDirectory}</directory>
- <outputDirectory></outputDirectory>
- <includes>
- <exclude>startup.*</exclude>
- </includes>
- </fileSet>
- <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
- <fileSet>
- <directory>${project.build.directory}</directory>
- <outputDirectory></outputDirectory>
- <includes>
- <include>*.jar</include>
- </includes>
- </fileSet>
- </fileSets>
- </assembly>
4. 经过jar和assembly,最终得到一个可发布的zip文件,内容结构如下:

利用MAVEN打包可运行jar包,包括依赖的第三方包的更多相关文章
- spring boot maven打包可运行jar包
普通打包之后在程序目录运行,或者编写bat运行时会提示“没有主清单属性”,这是因为并没有找到main()方法,需要我们指明告诉java程序 我bat中的代码 @echo off title mytit ...
- 使用Maven打包可运行jar和javaagent.jar的区别
简介 javaagent 是 Java1.5 之后引入的新特性,其主要作用是在class被加载之前对其拦截,以插入我们的字节码. java1.5 之前使用的是JVMTI(jvm tool interf ...
- maven 打包可运行jar包(转)
目录 1.前提 2.方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3.方法二:使用maven-assembly-plugin插件打包 4.方法三 ...
- Maven 打包可运行 jar
为配合自动化部署hudson,最近研究了如何将eclipse maven工程打包成可运行的jar函数及对应的资源文件. 由于我们工程中包含了多个可运行的任务,在打包成jar时需要分别导出,p ...
- 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包
http://blog.csdn.net/u013177446/article/details/54134394 ******************************************* ...
- maven: 打包可运行的jar包(java application)及依赖项处理
IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: <plugin> <groupId>org.codehau ...
- maven打包 tomcat运行pom配置 或 打成jar包
maven打包 tomcat运行pom配置,同时还需要配置org.apache.tomcat.maven插件,这里省略. <groupId>com.company</groupId& ...
- 利用Maven把项目生成jar包供其他项目使用
每当搭建框架时,第一步就是为系统整理一个接一个的jar包.用多了就开始深思,如何把自己的项目也整成jar包,供他人使用呢? 近期一直在看徐晓斌所著:<Maven实战>.因自己学识不够,只是 ...
- 关于 maven 打包直接运行的 fat jar (uber jar) 时需要包含本地文件系统第三方 jar 文件的问题
关于maven打包fat jar (uber jar) 时需要包含本地文件系统第三方jar文件的问题,今天折腾了一整天.最后还是用了spring boot来做.下面是几篇关于打包的有参考价值的文章,以 ...
随机推荐
- JAVA 从一个List里删除包含另一个List的数据
/** * 从listA里删除listB里有的数据 * @param listA * @param listB * @return */ public static List<String> ...
- EditPlus VC2010 and 2008 C/C++配置
源自:http://blog.csdn.net/weiling_shen/archive/2010/03/26/5421017.aspx 对于2010跟2008差不多,只需相应的修改一下路径即可:如2 ...
- Hive入门(一)
1 Hive中的数据定义 1.1 存储与创建 Hive会为每个数据库创建一个目录.数据库中的表以子目录的形式存储. 有一个例外是default中的表,因为这个库本身没有目录. 数据库的顶级目录是hiv ...
- [AI开发]目标跟踪之行为分析
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- 微信开发:微信js_sdk分享,使用场景,网页在微信app内部分享时的标题与描述,包括logo设置(一)
主要有下面几步.首先大家先分清楚 小程序的appid,appSecret 跟公众号的appid,appSecret是不一样的.因为这两个都能拿到token,且是不同的值. 准备开始: 1.准备好 公众 ...
- MMM 数位dp学习记
数位dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...
- I/O:OutputStream
OutputStream: void close() :关闭此输出流并释放与此流有关的所有系统资源. void flush() :刷新此输出流并强制写出所有缓冲的输出字节. void write(by ...
- Spring Cloud学习(一):Eureka服务注册与发现
1.Eureka是什么 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. Eureka ...
- 【最短路算法例题-升降梯上】-C++
描述 启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄. Nescafe之塔一共有N层,升降 ...
- VMware上安装虚拟机-教程
xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...