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>

参考链接:https://www.yisu.com/zixun/313235.html

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

  1. Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包

    参考自: http://blog.csdn.net/symgdwyh/article/details/6081532 Maven Assembly Plugin http://maven.apache ...

  2. Maven编译打包成可运行的Jar包

    2019独角兽企业重金招聘Python工程师标准>>> 刚接触Maven项目,以前都是普通的Java Project,少了啥就往lib文件夹下面加依赖的Jar包.工作中使用到Mave ...

  3. 使用maven构建dubbo服务的可执行jar包

    maven 项目结构 <build><!-- 使用dubbo推荐的方法,打包成jar,调用main方法启动 --><finalName>admin-service- ...

  4. 使用 Intellij Idea 打包 java 工程为可执行 jar 包

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 其实还有个简单多了方法,见: 超简单方法: Intellij Idea 把 java 工程打成可运行 ...

  5. idea 执行 java jar_使用 Intellij Idea 打包 java 工程为可执行 jar 包-Go语言中文社区...

    步骤: 1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+Alt+Shift+S). 2. 在弹出的窗口中左侧选中" ...

  6. Java编程工具(13):idea打包java为可执行jar包

    目录 1.选中Java项目工程名称 2. 在弹出的窗口中左侧选中"Artifacts" 3. 在配置窗口中配置"Main Class" 4.配置"Di ...

  7. pom文件 使用maven命令将项目打成可执行jar包

    --有前端页面打包方式 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  8. eclipse打包成jar_Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?

    前两天被人问到这样一个问题: "松哥,为什么我的 Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误?" 大伙有这样的疑问,就是因为还没搞清楚 ...

  9. Maven 生成打包可执行jar包

    文章目录 1. 需求 2. 开发环境 3. Maven打包插件介绍 4. Maven使用maven-jar-plugin打可执行jar包 5. Maven使用maven-assembly-plugin ...

最新文章

  1. Android自定义滑动验证条
  2. lisp 车位块自动编号_机械车位做产权登记,真的适合吗?
  3. autoitv3点击windows界面
  4. Windows系统appium移动端自动化真机环境搭建
  5. 风控建模系列(六):催收评分卡卡跟贷前申请卡关于目标变量的定义
  6. redhat 替换centos yum源
  7. Faster-Rcnn扫盲
  8. git mac 可视化diff_Git可视化比较工具P4Merge
  9. Github上关于iOS的各种开源项目集合
  10. 拟合数据和原始数据误差计算
  11. Es6模板字符串条件判断
  12. python爬取头条视频_Python爬虫:爬取某日头条某瓜视频,有/无水印两种方法
  13. IOC之bean之间的关系讲解
  14. tagged pointer
  15. python入门与实战-python介绍
  16. Facebook的数据公益项目相关工具介绍
  17. 前端post请求下载excel表格
  18. ECS进阶:FixedTimestepWorkaround
  19. openwrtx86安装docker_PVE下openwrt软路由docker环境安装unifi controller
  20. bmp180气压传感器工作原理_称重传感器的工作原理和传感器的种类

热门文章

  1. micropython开发环境_micropython开发者指南
  2. I9 9900K线程_9900k配什么主板
  3. 交通银行签约第四范式,建设全行级统一AI能力平台
  4. git 与github 命令行操作与控制
  5. 【深度学习】用 YOLO v5+DeepSORT,打造实时多目标跟踪模型
  6. 【职场经验】算法同学从学校到实习,需要改变什么
  7. 机器学习案例:scikit-learn实现ebay数据分析
  8. Pytorch CookBook
  9. 最强的Attention函数诞生啦,带给你意想不到的巨大提升!
  10. Windows下Core_Audio_APIs的使用简介