文章目录

  • 1. 需求
  • 2. 开发环境
  • 3. Maven打包插件介绍
  • 4. Maven使用maven-jar-plugin打可执行jar包
  • 5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包
  • 6. Maven生成可执行jar包及zip项目压缩包
  • 7. 执行jar包
  • 8. pom.xml配置
  • 9. package.xml文件

最近IDEA打可执行Jar包搞了三天,一直失败,好好学习一下Maven-assembly,在此记录一下

1. 需求

项目打包,满足以下要求:

  1. 整个项目打一个Zip包下面包括应用程序、应用程序依赖的jar包、说明文档
  2. 项目打的jar包可以执行不同类里的Main函数
  3. 项目源码打的jar包要与依赖的第三方jar包分开
  4. 项目里的执行脚本也要一块打包并进行分类
  5. document目录下的readme.txt放在压缩包的根目录下,其他的还放在这个目录下
  6. 打的jar包去掉不需要的目录(文件)

2. 开发环境

IDEA-2016 Maven3.3.9
项目的目录结构:

3. Maven打包插件介绍

assembly翻译过来就是组装、装配的意思
Maven对项目打包常用的打包插件有三种,分别是:

插件 功能
maven-jar-plugin maven 默认打包插件,用来创建 project jar
maven-shade-plugin 打可执行包,executable(fat) jar
maven-assembly-plugin 支持自定义打包方式

这里使用maven-jar-plugin和maven-assembly-plugin
项目目录:

每次找jar包之前先clean一下,不然的话IDEA会认为你的项目没有修改而不重新加载

另:配置文件的注释已经很详细了,这里就不另外再说明了

4. Maven使用maven-jar-plugin打可执行jar包

主要配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><!-- 对要打的jar包进行配置 --><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></manifest></archive><!--过滤掉不希望包含在jar中的文件--><excludes><!-- 排除不需要的文件夹(路径是jar包内部的路径) --><exclude>**/assembly/</exclude></excludes></configuration>
</plugin>

完整配置见底部

5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包

pom.xml下的主要配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><!-- 对项目的组装进行配置 --><configuration><!-- 指定assembly插件的配置文件所在位置 --><descriptors><descriptor>src/main/resources/assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 将组装绑定到maven生命周期的哪一阶段 --><phase>package</phase><goals><!-- 指定assembly插件的打包方式--><goal>single</goal></goals></execution></executions>
</plugin>

assembly插件的配置文件package.xml见底部

6. Maven生成可执行jar包及zip项目压缩包

双击执行mvn:package会生成两个包:可执行jar包和项目压缩包,因为assembly的装配配置的是绑定到这上面来的
双击执行assembly:single只生成项目压缩包

这里执行mvn:package

解压后的项目压缩包目录结构:

7. 执行jar包

解压缩生成的项目包
TestString的源码:

public class TestString {public static void main(String[] args) {String[] arr = new String[]{"aaa", "bbb", "ccc", "DDD", "EEE", "FFF"};System.out.println(StringUtils.join(arr, "---"));}
}

TestNumber的源码:

public class TestNumber {public static void main(String[] args) {Integer[] arr = new Integer[]{11, 22, 33, 44, 55, 66};System.out.println(StringUtils.join(arr, "---"));}
}

命令行运行生成的jar

java -classpath dong.jar com.dong.bigdata.TestString
java -classpath dong.jar com.dong.bigdata.TestNumber

运行结果:

8. pom.xml配置

包含两个文件:
pom.xml整体的配置
package.xml包含在pom.xml中,用于指定assembly装配时的配置

pom.xml文件:

<?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:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo--><groupId>com.dong</groupId><!--项目的通用名称--><artifactId>bigdata</artifactId><!--打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par--><packaging>jar</packaging><!--项目的版本--><version>1.0-SNAPSHOT</version><!-- ####################### 项目信息 ###################### --><!--用户描述项目的名称,无关紧要的东西--><name>bigdata</name><!--写明开发团队的网站,无关紧要--><url>http://http://www.dong.com/.com</url><!-- ####################### 环境设置 ###################### --><properties><!-- 项目执行脚本目录 --><project.script.execute.directory>src/main/scripts/execute</project.script.execute.directory><!-- 项目说明文档目录 --><project.document.directory>document</project.document.directory><!-- 项目配置文件目录 --><project.config.directory>src/main/resources</project.config.directory><!-- 项目编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 本地编译JDK版本 --><maven.compiler.source>1.8</maven.compiler.source><!-- 项目部署JDK版本 --><maven.compiler.target>1.8</maven.compiler.target></properties><!--配置Maven的仓库, 在此处配置的仓库会优先于setting.xml里配置的仓库,建议哪个仓库快,哪个配置在前面, 然后如果Maven在前面配置的仓库找不到的话会去后面的仓库找,如果后面的仓库都找不到,会去setting.xml中央仓库里找--><repositories><!-- 阿里云仓库,配置Maven仓库,速度快配置在最前面 --><repository><id>aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository><!-- 国内备选仓库 --><repository><id>repo2</id><url>http://repo2.maven.org/maven2/</url></repository><!-- Cloudera仓库,如果在阿里云仓库里找不到去Cloudera的仓库里找,主要是CDH版本Hadoop依赖的jar --><repository><id>cloudera</id><url>https://repository.cloudera.com/artifactory/cloudera-repos/</url></repository><!-- Scala仓库,如果前面两个都找不到来仓库找,如果此仓库也找不到,去中央仓库找 --><repository><id>scala-tools.org</id><name>Scala-Tools Maven2 Repository</name><url>http://scala-tools.org/repo-releases</url></repository></repositories><dependencies><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency></dependencies><build><finalName>dong</finalName><plugins><!-- The configuration of maven-jar-plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><!-- 对要打的jar包进行配置 --><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></manifest></archive><!--过滤掉不希望包含在jar中的文件--><excludes><!-- 排除不需要的文件夹(路径是jar包内部的路径) --><exclude>**/assembly/</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><!-- 对项目的组装进行配置 --><configuration><!-- 指定assembly插件的配置文件所在位置 --><descriptors><descriptor>src/main/resources/assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 将组装绑定到maven生命周期的哪一阶段 --><!--<phase>package</phase>--><goals><!-- 指定assembly插件的打包方式--><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>

9. package.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<assembly><id>full</id><!-- 最终打包成一个用于发布的zip文件 --><formats><format>zip</format></formats><!-- 把依赖jar包打包进Zip压缩文件的lib目录下 --><dependencySets><dependencySet><!--不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录--><useProjectArtifact>false</useProjectArtifact><!-- 第三方jar打包进Zip文件的lib目录下, --><!-- 注意此目录要与maven-jar-plugin中classpathPrefix指定的目录相同, --><!-- 不然这些依赖的jar包加载到ClassPath的时候会找不到--><outputDirectory>lib</outputDirectory><!-- 第三方jar不要解压--><!--<unpack>false</unpack>--></dependencySet></dependencySets><!-- 文件设置,你想把哪些文件包含进去,或者把某些文件排除掉,都是在这里配置--><fileSets><!-- 把项目自己编译出来的可执行jar,打包进zip文件的根目录 --><fileSet><directory>${project.build.directory}</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes></fileSet><!--把项目readme说明文档,打包进zip文件根目录下(这里针对目录document/readme.txt文件)${projet.document.directory}是pom.xml中自己配置的--><fileSet><directoryl>${projet.document.directory}</directoryl><outputDirectory></outputDirectory><includes><include>readme.*</include></includes></fileSet><!--把项目相关的说明文档(除了readme文档),打包进zip文件根目录下的document目录(这里针对document/exclode.txt文件)${project.document.directory}是在pom.xml中自己配置的--><fileSet><directory>${project.document.directory}</directory><outputDirectory>document</outputDirectory><excludes><exclude>readme.*</exclude></excludes></fileSet><!--把项目的脚本文件目录(src/main/scripts )中的启动脚本文件,打包进zip文件的根目录(这里针对的是src/scripts/execute/include-file.sh文件)${project.script.execute.directory}--><fileSet><directory>${project.script.execute.directory}</directory><outputDirectory></outputDirectory><includes><include>*</include></includes></fileSet></fileSets>
</assembly>

Maven 生成打包可执行jar包相关推荐

  1. 【收藏】Maven 生成打包可执行jar包

    Maven 生成打包可执行jar包 https://blog.csdn.net/daerzei/article/details/82883472

  2. 如何通过maven打包可执行jar包

    一.目的 介绍将代码打包成jar包的四种形式: 只打包本项目的代码,不包括依赖的jar包,并且不可直接通过java -jar xxx.jar执行(应用场景:我们日常使用依赖的jar包) 只打包本项目的 ...

  3. maven导出Java方法_eclipse导出maven工程的可执行jar包

    一.eclipse导出maven工程的可执行jar包 建立两个maven工程 ZKServer 和ZKClient 注意:用maven进行开发管理的话,默认的打出来的jar包是不能运行的,需要在pom ...

  4. IDEA 打包可执行 jar 包

    Idea 打包可执行 jar 包 1.参考资料 idea打包java可执行jar包 Intellij Idea 将java项目打包成jar,cmd运行该jar 2.操作步骤 在项目上右击,选择[Ope ...

  5. 使用Maven 实现打包生成一个可执行jar包:附详细配置解释说明

    1. 需求 项目打包,满足以下要求: 1.整个项目打一个Zip包下面包括应用程序.应用程序依赖的jar包.说明文档 2.项目打的jar包可以执行不同类里的Main函数 3.项目源码打的jar包要与依赖 ...

  6. Maven打包可执行jar包方法大全(史上最全)

    目录 打包方法 方法一:使用maven-jar-plugin和maven-dependency-plugin 方法二:使用maven-assembly-plugin (推荐) 方法三:使用maven- ...

  7. 聚合maven+spring-boot打包可执行jar

    整整搞了一天,终于解决这个问题了.这里是四个module,module之间存在依赖,打包两个可执行jar,看下最终效果吧 聚合maven+spring-boot的搭建很简单,和普通的聚合maven没有 ...

  8. maven打的包带exec包比不带的大_spring boot maven打包可执行jar包缺少依赖包的问题...

    问题描述:spring boot使用maven的package命令打出来的包,却不包含依赖的jar包 问题原因:打包时使用了maven默认的maven-jar-plugin插件,而不是spring-b ...

  9. mvn 打包可执行包_如何用Maven打包可执行jar包

    在pom文件里面加入如下代码: org.apache.maven.plugins        maven-compiler-plugin                    1.7         ...

最新文章

  1. 如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
  2. velocity自定义标签和指令
  3. 使用fprintf()函数格式化输出至磁盘文件和是stdout
  4. 《TOMCAT权威指南》摘抄
  5. javascript概要
  6. ImportError: No module named urllib2
  7. 华为慧通和华为区别_华为P30与华为P30 pro 的区别
  8. Math详解大全,数学类
  9. Java的对象和类 以学生管理系统为例
  10. 规范并优化Nginx配置文件
  11. intel网卡win10 修改mac
  12. QT MD4 MD5 Sha1等几种加密方式
  13. 【Matlab绘图】plot3函数绘制三维点或线图
  14. 大数据经典案例与谬误
  15. npm安装依赖包 版本冲突怎么办 --legacy-peer-deps的正确使用方法
  16. 服务器千兆网卡芯片,Intel 82574L and 82576 千兆网卡芯片区别.pdf
  17. 科学型IT人才和工程型IT人才
  18. 阿里云OSS获取文件强制下载的签名URL
  19. Java SE 控制流程(今天本君不早朝)
  20. 拒不履行信息网络安全管理义务罪无未遂

热门文章

  1. Windows XP启动过程及常见启动故障
  2. 6U-CPCI卡设计方案学习资料第193篇:基于TI 达芬奇DSP TMS320DM8148音视编解码与存储6U-CPCI卡设计方案
  3. 2018计算机等级考试培训班,2018年计算机等级考试培训.ppt
  4. 扁平化iOS风商务工作汇报PPT模板
  5. 别告诉我你会用WORD
  6. 听,知天下、明事理(喜马拉雅App)
  7. C#程序员学习 Python
  8. R语言-生存分析与结果的图像处理
  9. Stripes 初学
  10. Win10中开启沙盒功能