先简单介绍下maven打包的几种方式,如果你只是想知道如何使用assembly插件打包的时候去掉assembly id可以直接跳到下面

Maven打包的几种方式

1. 使用maven-jar-plugin打包

使用默认的maven-jar-plugin 打包

在使用idea的时候,如果不引入任何maven打包插件,在执行mvn clean package的时候会使用默认的maven-jar-plugin进行打包,得到一个artifactId-version.jar的包

这个包里不包含我们引入的maven依赖,并且没有指定MainClass,所以不是一个可执行jar,往往是用于在多模块项目中进行引用的

使用maven-jar-plugin和maven-dependency-plugin插件打包

如果想要打包一个可以直接通过java -jar命令运行的jar包,就需要

  1. 指定Main-Class,以便确定程序的入口
  2. 要能加载到引入的依赖包
public class App {public static void main(String[] args) {System.out.println(JSON.parse("{\"name\":\"chenpp\"}"));System.out.println("Project start success!");}
}

pom.xml

 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.6</version><configuration><archive><manifest><!--在MANIFEST.MF加上Class-Path项并配置依赖包(如果有的话)--><addClasspath>true</addClasspath><!--指定依赖包所在目录--><classpathPrefix>lib/</classpathPrefix><!--指定MANIFEST.MF中的Main-Class--><mainClass>com.chenpp.App</mainClass></manifest></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.10</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!--复制依赖包到如下目录下,以便在maven-jar-plugin里指定。就是项目target目录下的lib目录--><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins></build>

可以看到打包后的目录结构如下:

其jar包的MANIFEST.MF内容如下:

试下执行该jar包, 这样一个可执行jar就打包好了

2. 使用maven-assembly-plugin插件打包

打包一个可执行jar

    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.5.5</version><configuration><archive><manifest><mainClass>com.chenpp.App</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><!--表示在执行package打包时,执行assembly:single,所以可以直接使用mvn package打包--><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

打包后会得到两个jar包,一个是通过maven-jar-plugin:2.4:jar 打包得到的maven-package-1.0.jar(非可执行jar),一个是由maven-assembly-plugin打包得到的maven-package-1.0-jar-with-dependencies.jar,是一个可执行jar包,MANIFEST.MF里指定了Main-Class,而依赖jar是通过把所有依赖jar的代码也拷贝到jar包里来实现的,所以该jar明显比默认的jar包大很多

打包zip等不同类型的压缩包

 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><!--   这个是assembly的配置文件所在位置  --><descriptor>build.xml</descriptor></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

有一个重要的配置文件build.xml,其各参数见官网如下: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"><id>bin</id><formats><format>zip</format></formats><!--是否你打的包会包含你当前项目的Base目录,这里就是会包含一个maven-package-1.0目录,默认为true--><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><outputDirectory>lib</outputDirectory><!--表示是否需要引入当前项目的jar包到dependencySet,默认为true--><useProjectArtifact>true</useProjectArtifact></dependencySet></dependencySets><fileSets><fileSet><!--复制resources下的文件到jar包的conf目录--><directory>src/main/resources</directory><outputDirectory>conf</outputDirectory></fileSet></fileSets>
</assembly>

打包后的目录结构如下所示:

需要注意这样打包出来的是artifactId-version-id.formats包(这里就是maven-package-1.0-bin.zip),而不是可执行jar

3. 使用maven-shade-plugin插件打包

    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.chenpp.App</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>


打包出来的是三个包,maven-package-1.0.jar和shade插件打包出来的maven-package-1.0-shaded.jar都是可执行jar,而original…jar 里只包含了project自己的 class 文件

maven-assembly-plugin打包如何去掉assembly id

最近在部署项目的时候遇到一个问题,发布平台在创建镜像的时候会去找artifactId-version.zip文件,于是我只能选择maven-assembly-plugin插件来打包,但是这样一来得到的包会带有assembly id的后缀,如何去掉呢?

查阅资料后发现有配置属性<appendAssemblyId>false</appendAssemblyId>,只要将其加入就行

```xml<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptor>build.xml</descriptor></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

`这样就可以得到不含assembly id的zip压缩包了

maven打包的各种方式和如何在使用maven-assembly-plugin打包时去掉assembly id相关推荐

  1. maven打包三种方式

    方法一:cmd 控制台打包(比较不推荐) 首先安装maven插件百度下载一个,配置环境变量什么的~在cmd控制台能mvn version能有数据出现. 打包只需要到项目的根目录下~在cmd敲入mvn ...

  2. maven 打包编译_您是否真的想加快Maven的编译/打包速度? 那么takari生命周期插件就是答案。...

    maven 打包编译 像你们中的许多人一样,我正在使用多模块Maven项目 . 与现有的许多系统相比,它不是一个巨大的系统,它具有15个模块,3种不同的耳朵部署,带有属性文件的大量参数化以及大约10万 ...

  3. java打jar包的方式,jar命令,maven

    初学java编程,不知道怎么打包,或者说不知道打包的原理,本文来一探究竟 构建软件项目就像是去执行一系列任务,下载依赖,把jar包添加到classpath,把源码编译成字节码,运行测试,打包成为jar ...

  4. eclipse MAVEN插件正确使用方式。

    首先贴出我的MAVEN的setting.xml文件,嗯,我也怕忘了下次再怎么去配置. <?xml version="1.0" encoding="UTF-8&quo ...

  5. Spring Boot 使用 Maven assembly 插件打包

    文章目录 1 摘要 2 Maven 核心依赖与配置 2.1 pom.xml 配置 2.2 assembly 配置信息 3 启动与停止脚本 3.1 启动脚本 3.2 停止脚本 4 推荐参考资料 5 Gi ...

  6. Jenkins之构建Maven项目的多种方式

    Jenkins构建的项目类型介绍 Jenkins中自动构建项目的类型有很多,常用的有以下三种: 自由风格软件项目(FreeStyle Project) Maven项目(Maven Project) 流 ...

  7. Maven打包时去掉项目版本号

    Maven打包时去掉项目版本号 Maven打包后,jar或war文件名里带有版本号信息,如projectname0.0.1-SNAPSHOT.jar等,怎么去掉呢? 解决办法: 打开项目pom.xml ...

  8. 《maven实战》笔记(2)----一个简单maven项目的搭建,测试和打包

    参照<maven实战>在本地创建对应的基本项目helloworld,在本地完成后项目结构如下: 可以看到maven项目的骨架: src/main/java(javaz主代码) src/te ...

  9. 使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war

    使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war 参考文章: (1) ...

最新文章

  1. C#“.NET研究”类类型
  2. 北大 AI 公开课 2019 | 颜水成:人工智能行业观察与实践
  3. JavaScript中Promises/A+规范的实现
  4. 互联网日报 | 北斗三号全球卫星导航系统正式开通;拼多多上线首届“真香节”;海尔电器私有化草案出炉...
  5. 不是华为!国内首款5G手机开卖:10分钟送达第一单
  6. javascript class static
  7. 为什么我们需要域?MS Active Directory系列之一
  8. 使用SVG构建icon
  9. idea更改页面背景颜色设置为护眼颜色
  10. 主成分分析matlab代码_主成分分析,换个角度看世界
  11. 这篇文章让你实现时光机特效的操作
  12. 直播带货那么火,测试人员如何对直播类产品的直播质量进行测试呢?
  13. Jmeter参数化的四种方式
  14. python设置excel单元格宽度
  15. 完成您的第一个智能无人机
  16. AcWing-C/C++语法基础【合集1】
  17. 配置 Rails 应用程序
  18. R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)
  19. Cloudberry Backup使用过程中的一些小问题
  20. 【Java】动态模拟时钟

热门文章

  1. MySQL常用存储引擎之CSV
  2. SpringBoot 基础拦截器
  3. propertysource注解 找不到文件_WinXP系统电脑开机提示windows找不到null文件的解决方法...
  4. java dwr实现消息推送_dwr消息推送
  5. varnish缓存服务器构建疑问
  6. Linux_CentOS-服务器搭建 六
  7. Python问答环节(2)
  8. 代码需要不断进化和改变
  9. Merge Two Sorted Lists LeetCode
  10. 用AsyncCtp实现一个简单的EchoServer