Maven⽣成打包可执⾏jar包的⽅法步骤最近IDEA打可执⾏Jar包搞了三天,⼀直失败,好好学习⼀下Maven-assembly,在此记录⼀下
1. 需求
项⽬打包,满⾜以下要求:
1.整个项⽬打⼀个Zip包下⾯包括应⽤程序、应⽤程序依赖的jar包、说明⽂档
2.项⽬打的jar包可以执⾏不同类⾥的Main函数
3.项⽬源码打的jar包要与依赖的第三⽅jar包分开
4.项⽬⾥的执⾏脚本也要⼀块打包并进⾏分类
5.document⽬录下的放在压缩包的根⽬录下,其他的还放在这个⽬录下
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中,不要包含l和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包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<!-- 对项⽬的组装进⾏配置 -->
<configuration>
<!-- 指定assembly插件的配置⽂件所在位置 -->
<descriptors>
<descriptor>src/main/resources/l</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- 将组装绑定到maven⽣命周期的哪⼀阶段 -->
<phase>package</phase>
<goals>
<!-- 指定assembly插件的打包⽅式-->
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
assembly插件的配置⽂件l见底部
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. l配置
包含两个⽂件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- >>>>### 基础设置 >>>>## -->
<!--groupId:项⽬或者组织的唯⼀标志,并且配置时⽣成路径也是由此⽣成,如jo⽣成的相对路径为:/org/myproject/mojo--> <groupId>com.dong</groupId>
<!--项⽬的通⽤名称-->
<artifactId>bigdata</artifactId>
maven打包本地jar包<!--打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par-->
<packaging>jar</packaging>
<!--项⽬的版本-->
<version>1.0-SNAPSHOT</version>
<!-- >>>>### 项⽬信息 >>>>## -->
<!--⽤户描述项⽬的名称,⽆关紧要的东西-->
<name>bigdata</name>
<!--写明开发团队的⽹站,⽆关紧要-->
<url>www.dong/</url>
<!-- >>>>### 环境设置 >>>>## -->
<properties>
<!-- 项⽬执⾏脚本⽬录 -->
<ute.directory>src/main/scripts/execute</ute.directory>
<!-- 项⽬说明⽂档⽬录 -->
<project.document.directory>document</project.document.directory>
<!-- 项⽬配置⽂件⽬录 -->
&fig.directory>src/main/resources</fig.directory>
<!-- 项⽬编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 本地编译JDK版本 -->
<mavenpiler.source>1.8</mavenpiler.source>
<!-- 项⽬部署JDK版本 -->
<mavenpiler.target>1.8</mavenpiler.target>
</properties>
<!--
配置Maven的仓库, 在此处配置的仓库会优先于l⾥配置的仓库,
建议哪个仓库快,哪个配置在前⾯, 然后如果Maven在前⾯配置的仓库不到的话会去后⾯的仓库,
如果后⾯的仓库都不到,会去l中央仓库⾥
-->
<repositories>
<!-- 阿⾥云仓库,配置Maven仓库,速度快配置在最前⾯ -->
<repository>
<id>aliyun</id>
<url>maven.aliyun/nexus/content/groups/public</url>
</repository>
<!-- 国内备选仓库 -->
<repository>
<id>repo2</id>
<url>/maven2/</url>
</repository>
<!-- Cloudera仓库,如果在阿⾥云仓库⾥不到去Cloudera的仓库⾥,主要是CDH版本Hadoop依赖的jar --> <repository>
<id>cloudera</id>
<url>repository.cloudera/artifactory/cloudera-repos/</url>
</repository>
<!-- Scala仓库,如果前⾯两个都不到来仓库,如果此仓库也不到,去中央仓库 -->
<repository>
<id&</id>
<name>Scala-Tools Maven2 Repository</name>
<url>/repo-releases</url>
</repository>
</repositories>
<dependencies>
<!-- mvnrepository/artifact/org.apachemons/commons-lang3 -->
<dependency>
<groupId>org.apachemons</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中,不要包含l和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>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
推荐文章
热门文章
-
随机森林算法的改进方法
2024-10-02 -
基于随机森林算法的风险预警模型研究
2024-10-02 -
Python中的随机森林算法详解
2024-10-02 -
随机森林发展历史
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(八)
2024-10-02 -
随机森林回归模型原理
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(六)
2024-10-02 -
如何使用随机森林进行时间序列数据预测(四)
2024-10-02 -
如何使用随机森林进行异常检测(六)
2024-10-02 -
随机森林算法和grandientboosting算法 -回复
2024-10-02 -
随机森林方法总结全面
2024-10-02 -
随机森林算法原理和步骤
2024-10-02 -
随机森林的原理
2024-10-02 -
随机森林 重要性
2024-10-02 -
随机森林算法
2024-10-02 -
机器学习中随机森林的原理
2024-10-02 -
随机森林算法原理
2024-10-02 -
使用计算机视觉技术进行动物识别的技巧
2024-10-02 -
基于crf命名实体识别实验总结
2024-10-02 -
transformer预测模型训练方法
2024-10-02
最新文章
-
随机森林算法介绍及R语言实现
2024-10-02 -
基于随机森林优化的神经网络算法在冬小麦产量预测中的应用研究_百度文 ...
2024-10-02 -
基于正则化贪心森林算法的情感分析方法研究
2024-10-02 -
随机森林算法和grandientboosting算法
2024-10-02 -
基于随机森林的图像分类算法研究
2024-10-02 -
随机森林结合直接正交信号校正的模型传递方法
2024-10-02
发表评论