转载自: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,把整个项目打包成一个发布包。

  1. <build>
  2. <plugins>
  3. <!-- The configuration of maven-jar-plugin -->
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-jar-plugin</artifactId>
  7. <version>2.4</version>
  8. <!-- The configuration of the plugin -->
  9. <configuration>
  10. <!-- Configuration of the archiver -->
  11. <archive>
  12. <!--
  13. 生成的jar中,不要包含pom.xml和pom.properties这两个文件
  14. -->
  15. <addMavenDescriptor>false</addMavenDescriptor>
  16. <!-- Manifest specific configuration -->
  17. <manifest>
  18. <!--
  19. 是否要把第三方jar放到manifest的classpath中
  20. -->
  21. <addClasspath>true</addClasspath>
  22. <!--
  23. 生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/
  24. -->
  25. <classpathPrefix>lib/</classpathPrefix>
  26. <!--
  27. 应用的main class
  28. -->
  29. <mainClass>dbRobot.BeanRobot</mainClass>
  30. </manifest>
  31. </archive>
  32. <!--
  33. 过滤掉不希望包含在jar中的文件
  34. -->
  35. <excludes>
  36. <exclude>${project.basedir}/xml/*</exclude>
  37. </excludes>
  38. </configuration>
  39. </plugin>
  40. <!-- The configuration of maven-assembly-plugin -->
  41. <plugin>
  42. <groupId>org.apache.maven.plugins</groupId>
  43. <artifactId>maven-assembly-plugin</artifactId>
  44. <version>2.4</version>
  45. <!-- The configuration of the plugin -->
  46. <configuration>
  47. <!-- Specifies the configuration file of the assembly plugin -->
  48. <descriptors>
  49. <descriptor>src/main/assembly/package.xml</descriptor>
  50. </descriptors>
  51. </configuration>
  52. <executions>
  53. <execution>
  54. <id>make-assembly</id>
  55. <phase>package</phase>
  56. <goals>
  57. <goal>single</goal>
  58. </goals>
  59. </execution>
  60. </executions>
  61. </plugin>
  62. </plugins>
  63. </build>

3. 再来看package.xml的配置

  1. <assembly>
  2. <id>bin</id>
  3. <!-- 最终打包成一个用于发布的zip文件 -->
  4. <formats>
  5. <format>zip</format>
  6. </formats>
  7. <!-- Adds dependencies to zip package under lib directory -->
  8. <dependencySets>
  9. <dependencySet>
  10. <!--
  11. 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录
  12. -->
  13. <useProjectArtifact>false</useProjectArtifact>
  14. <outputDirectory>lib</outputDirectory>
  15. <unpack>false</unpack>
  16. </dependencySet>
  17. </dependencySets>
  18. <fileSets>
  19. <!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
  20. <fileSet>
  21. <directory>${project.basedir}</directory>
  22. <outputDirectory>/</outputDirectory>
  23. <includes>
  24. <include>README*</include>
  25. <include>LICENSE*</include>
  26. <include>NOTICE*</include>
  27. </includes>
  28. </fileSet>
  29. <!-- 把项目的配置文件,打包进zip文件的config目录 -->
  30. <fileSet>
  31. <directory>${project.basedir}\src\main\config</directory>
  32. <outputDirectory>config</outputDirectory>
  33. <includes>
  34. <include>*.xml</include>
  35. <include>*.properties</include>
  36. </includes>
  37. </fileSet>
  38. <!-- 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 -->
  39. <fileSet>
  40. <directory>${project.build.scriptSourceDirectory}</directory>
  41. <outputDirectory></outputDirectory>
  42. <includes>
  43. <include>startup.*</include>
  44. </includes>
  45. </fileSet>
  46. <!-- 把项目的脚本文件(除了启动脚本文件),打包进zip文件的script目录 -->
  47. <fileSet>
  48. <directory>${project.build.scriptSourceDirectory}</directory>
  49. <outputDirectory></outputDirectory>
  50. <includes>
  51. <exclude>startup.*</exclude>
  52. </includes>
  53. </fileSet>
  54. <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
  55. <fileSet>
  56. <directory>${project.build.directory}</directory>
  57. <outputDirectory></outputDirectory>
  58. <includes>
  59. <include>*.jar</include>
  60. </includes>
  61. </fileSet>
  62. </fileSets>
  63. </assembly>

4. 经过jar和assembly,最终得到一个可发布的zip文件,内容结构如下:

利用MAVEN打包可运行jar包,包括依赖的第三方包的更多相关文章

  1. spring boot maven打包可运行jar包

    普通打包之后在程序目录运行,或者编写bat运行时会提示“没有主清单属性”,这是因为并没有找到main()方法,需要我们指明告诉java程序 我bat中的代码 @echo off title mytit ...

  2. 使用Maven打包可运行jar和javaagent.jar的区别

    简介 javaagent 是 Java1.5 之后引入的新特性,其主要作用是在class被加载之前对其拦截,以插入我们的字节码. java1.5 之前使用的是JVMTI(jvm tool interf ...

  3. maven 打包可运行jar包(转)

    目录 1.前提 2.方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3.方法二:使用maven-assembly-plugin插件打包 4.方法三 ...

  4. Maven 打包可运行 jar

    为配合自动化部署hudson,最近研究了如何将eclipse maven工程打包成可运行的jar函数及对应的资源文件.      由于我们工程中包含了多个可运行的任务,在打包成jar时需要分别导出,p ...

  5. 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

    http://blog.csdn.net/u013177446/article/details/54134394 ******************************************* ...

  6. maven: 打包可运行的jar包(java application)及依赖项处理

    IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: <plugin> <groupId>org.codehau ...

  7. maven打包 tomcat运行pom配置 或 打成jar包

    maven打包 tomcat运行pom配置,同时还需要配置org.apache.tomcat.maven插件,这里省略. <groupId>com.company</groupId& ...

  8. 利用Maven把项目生成jar包供其他项目使用

    每当搭建框架时,第一步就是为系统整理一个接一个的jar包.用多了就开始深思,如何把自己的项目也整成jar包,供他人使用呢? 近期一直在看徐晓斌所著:<Maven实战>.因自己学识不够,只是 ...

  9. 关于 maven 打包直接运行的 fat jar (uber jar) 时需要包含本地文件系统第三方 jar 文件的问题

    关于maven打包fat jar (uber jar) 时需要包含本地文件系统第三方jar文件的问题,今天折腾了一整天.最后还是用了spring boot来做.下面是几篇关于打包的有参考价值的文章,以 ...

随机推荐

  1. 风险:隐蔽权限修改导致rgw服务中断

    上午正在开会,突然收到rgw服务异常的告警(503 Service Unavailable),立马停下来处理告警,避免影响到用户~   我们的rgw frontend用的是apache,之前也遇到过5 ...

  2. Gym 101257G:24(尺取)

    http://codeforces.com/gym/101257/problem/GGym 101257G 题意:给出n个人,和一个数s,接下来给出每个人当前的分数和输掉的概率.当一个人输了之后就会掉 ...

  3. 基于C#的机器学习--深层信念网络

    我们都听说过深度学习,但是有多少人知道深度信念网络是什么?让我们从本章开始回答这个问题.深度信念网络是一种非常先进的机器学习形式,其意义正在迅速演变.作为一名机器学习开发人员,对这个概念有一定的了解是 ...

  4. you-get视频下载

    项目主页 https://github.com/soimort/you-get 使用you-get库一些简单命令下载视频音乐 you-get是一个基于python3的下载器,没有客户端或者可视化工具, ...

  5. ThreadGroup详细讲解

    import java.util.concurrent.TimeUnit; public class Test { public static void main(String[] args){ // ...

  6. MyBatis 接口多参数的处理方法

    From<MyBatis从入门到精通> 1.接口类中增加的方法: /* 2.7 多个接口参数的用法 多个参数时,可以选取的方案有:使用Map类型或者使用@Param注解 使用Map类型作为 ...

  7. py+selenium一个可被调用的登录测试脚本【待优化】

    大部分系统现在都有登录页面,本文主要尝试写一个登录的测试脚本,及另一个脚本调用它登录测试已登录的页面模块. 目标: 登录脚本:从excel里获取登录的测试数据(包括异常测试)→执行登录脚本→输出是否通 ...

  8. JDBC连接-操作数据库

    JDBC连接数据库的操作步骤 *条件:先启动mysql,然后创建新连接.这里我用Navicat工具来操作数据库. 前面是创建数据库,以及授权的问题.然后打开eclipse 这里我整理一下 抛出的两个异 ...

  9. 洛谷P2055 [ZJOI2009]假期的宿舍 题解

    题目链接: https://www.luogu.org/problemnew/show/P2055 分析: 这道题比较简单,二分图的练习题(当然最大流同理). 易得我们可以将人放在一侧,床放在一侧. ...

  10. Excel催化剂开源第43波-Excel选择对象Selection在.Net开发中的使用

    Excel的二次开发有一极大的优势所在,可以结合用户的交互进行程序的运行,大量用户的交互,都是从选择对象开始,用户选择了单元格区域.图形.图表等对象,之后再进行程序代码的加工处理,生成用户所需的最终结 ...