Maven中利用assembly插件打包jar包
作者:KingWang_WHU 发布时间:2022-07-09 04:32:14
在maven中有几种方法打包项目,在之前的一篇博客中【Java】打包Jar包并用脚本执行,已经介绍了怎么在没有maven插件的情况下,怎么打包项目,并执行的。
而本篇则是在上一篇文章【Maven】Maven系列(一)——环境安装配置和新建maven项目之后,总结一下怎么使用maven插件进行打包项目。
maven中有多种插件提供了打包功能,分别是maven-jar-plugin(用来打包成jar包),maven-war-plugin(打包成war包)、maven-assembly-plugin。
这里只介绍怎么使用assembly插件打包项目成jar包。
主要有以下几个步骤(前提是IDE中已经有maven插件了)
1,配置pom.xml文件
2,执行maven命令中的assembly:assembly命令进行打包
3,将对应的资源文件复制出来放到同生成的jar包文件同目录下,以便运行jar包时候可以找到相应的资源。
4,利用java -jar命令运行jar包
1,在项目的pom.xml文件中添加一个标签
<plugin></plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.hey.main.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
如下是一个完整的pom.xml文档:
<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>ShareBike</groupId>
<artifactId>ShareBike</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>main.PushTrailVerticle</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
<version>oracle12c</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web-client</artifactId>
<version>3.4.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.vividsolutions/jts -->
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
</project>
上面的mainClass标签中的内容替换成自己的main函数所在的类,前面要包含package名字,也就是package_name.MainClassName。
2,执行打包命令
2.1 右击选中项目的properties–>run as–>maven build….
2.2执行assembly:assembly命令
在Main窗口下的Goals里填写assembly:assembly,然后点击run就可以了。
2.3 run之后就会在项目的target目录下生成一个
项目名-版本号-with-dependencies的一个jar包,这个是个fat jar包,里面包含了项目里用到的依赖项。
当然也会生成另外一个没有包含依赖项的jar包。
3 部署项目
因为项目中还用到了很多资源文件,一些txt,properties文件等等,因此在部署的时候,还需要将这些文件存放在和jar包同路径下(否则就会出现运行时资源找不到的异常)。这一点和【Java】打包Jar包并用脚本执行里一样,可以参照这一篇文章。
当然也可以编辑pom.xml文件中的内容,打包时把资源文件一起打包进去,但是我们一些配置文件一般都是可能需要自己可以手动编辑的,如果打包到jar包中,就无法编辑了。
4 运行jar包
编写一个bat命令文件,里面的内容就是java -jar jar_name。
该命令文件也放在和jar同目录下,点击即可运行程序。
来源:https://blog.csdn.net/wk1134314305/article/details/76407617


猜你喜欢
- 前言之前探讨过的 sealed class 和 sealed interface 存在 module 的限制,但其主要用于密封 class
- 本文实例讲述了Java TreeMap排序算法。分享给大家供大家参考,具体如下:TreeMap 和 HashMap 用法大致相同,但实际需求
- 1. 通过字节流实现文件的拷贝 /** * 通过字节流实现文件的拷贝 * @param sourcePath 源
- 这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局。程序中设置的LayoutParams,划分额外空间比例为6分之5,
- 可以不用经过 Html.fromHtml 因为我的数据里面含有一点 html的标签。所以经过html转换了。 实现方法: TextView
- 项目地址:https://github.com/JeasonWong/SlackLoadingView老规矩,先上效果。图好大。。说下第一眼
- Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见《详解Android中Intent的使用方法》。如
- 三种方式 下面为大家一一对应过滤器的方式 * 的方式过滤器的方式这种方式简单点 但是可配置性不高注意:一定得扫描到spring容器中创建一个
- 目录场景介绍自动填充处理器Mybatis-Plus配置类配置实体类中相关字段的自动填充策略在阿里开发手册的建表规约中有说明,数据库表中应该都
- 本文实例讲述了C#实现HTTP上传文件的方法。分享给大家供大家参考。具体实现方法如下:发送文件代码如下:/// <summary>
- 看了这个排行榜, 小编只想说:流水的编程语言,铁打的Java,C/C++!!人工智能的前景已经不用多说了,越来越多的人看重人工智能的前景,想
- 虚拟摇杆在移动游戏开发中,是很常见的需求,今天我们在Unity中,使用UGUI来实现一个简单的虚拟摇杆功能。1.打开Unity,新创建一个U
- public static boolean isMobileNumber(String mobiles) {return Pattern.c
- package 斐波那契数;import java.util.Scanner;class 斐波那契数 { public static voi
- 效果图开发、使用环境说明安装TSC_7.3.8_M-3.exe打印机驱动,安装时选择对应的ttp 244 pro将TSCLIB.dll复制到
- mybatis初始化SqlSessionFactory失败总结原因有几点1.resources中的xml配置文件放错位置或者是放的太深加载不
- 前言最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博
- 话不多说,直接上实例:一、获取集合内重复值public void GetDuplicateValue(){ List<st
- 关于java的字符串处理我们一般使用String类和StringBuffer类那么String类和StringBuffer类的区
- 走马灯是一种常见的效果,本文讲一下如何用 PageView 在 Flutter 里实现一个走马灯, 效果如下,当前页面的高度比其它页面高,切