罗列笔者认为比较有用的一些maven打包插件,方便后续查阅

spring-boot-maven-plugin

springboot自带的maven插件,可用于简单的JAR/WAR方式打包,官方地址为https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html

简单的应用如下

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--当使用springboot构建服务,则该配置可省略-->
<version>2.1.4.RELEASE</version>
</plugin>

当执行mvn clean package命令的时候,其会默认执行该插件的repackage任务。其会在target目录下生成以下两个文件

> ls target/*.jar
> target/demo-springboot-web-0.0.1-SNAPSHOT.jar target/demo-springboot-web-0.0.1-SNAPSHOT.jar.original

其中demo-springboot-web-0.0.1-SNAPSHOT.jar.original文件,用户可将.original后缀去掉便可得到用户自己编写的项目包。

demo-springboot-web-0.0.1-SNAPSHOT.jar文件往往比上面那个文件要大的多,其实其内部已经将用户编写的项目所相关的依赖都打进去了,百闻不如一见。

由图中可知,相应的依赖均被打入至\BOOT-INF\lib目录,而相应的源码则被编译放置到\BOOT-INF\classes目录。

上述打出的JAR包,由\META-INF\MANIFEST.MF文件的属性Main-Class可知具体的启动由springboot官方编写的org.springframework.boot.loader.JarLauncher类来启动,且其会去加载Start-Class属性指定的类来作为真正的启动类。而用户层的调用则可执行命令java -jar demo-springboot-web-0.0.1-SNAPSHOT.jar便可


而用户如果想个别指定相应的main-class便可使用以下配置

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--当使用springboot构建服务,则该配置可省略-->
<version>2.1.4.RELEASE</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.demo.DemoSpringApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

maven-assembly-plugin

apache开发的maven插件,可用于复杂方式打包,比如支持ZIP、TAR等方式的输出,有助于集成。官方地址为http://maven.apache.org/plugins/maven-assembly-plugin/plugin-info.html

英文单词assembly带有组装的意思,其功能比较强大,一般用户都比较青睐的工具。

简单的应用如下

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
</plugin>

倘若我们直接使用mvn clean package命令,你会发现毫无有用的包打出来,看来是需要添加一些配置才能。


1.官方提供了默认的装配方式,比如jar-with-dependencies

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
<descriptorRefs>
</configuration>
<!--bind goal to package-->
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
<goals>
</execution>
</executions>
</plugin>

这时候可使用mvn clean package进行打包了,还是以上述的项目为例,打包后的文件出现在target目录

> ls target\*.jar
> target/demo-springboot-web-0.0.1-SNAPSHOT.jar target/demo-springboot-web-0.0.1-SNAPSHOT-jar-with-denpendencies.jar

spring-boot-maven插件打包类似,前者为项目源码,后者为相应的依赖包。简单看下相应的依赖包情况

由上图可知相应的源码也被打进包中,所有的依赖包的代码都会打进了该包中。当然用户如果想指定相应的启动类,则采取archive配置即可。

2.使用最多的还是用指定相应的文件来扩展我们的需求(与spring-boot-maven插件搭配使用)。下面贴一个示例,具体的用户可查阅文档


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> *** <build>
<finalName>demoWeb</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--如果指定为true,则表示打出来的jar包为可执行jar包,直接可以在*nix服务器上执行./${name}.jar便可运行。-->
<!--官方注释不建议使用java -jar等方式调用打出来的包,当此配置为true时-->
<executable>true</executable>
</configuration>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
<!--bind to package phase-->
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

descriptor.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<!-- 可自定义,这里指定的是项目环境 -->
<id>release</id> <!-- 打包的类型,如果有N个,将会打N个类型的包 -->
<formats>
<format>tar.gz</format>
<!--<format>zip</format>-->
</formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets>
<!--
0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
0644->即用户具有读写权限,组用户和其它用户具有只读权限;
--> <!-- 将src/main/assembly/bin目录下的所有文件输出到打包后的bin目录中 -->
<fileSet>
<directory>${basedir}/src/main/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
<includes>
<include>**.sh</include>
<include>**.bat</include>
</includes>
</fileSet> <!-- 指定输出resource中的配置文件到conf目录中 -->
<fileSet>
<directory>${basedir}/src/main/resource</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>*.*</include>
<include>**/**</include>
</includes>
</fileSet> <!-- 将项目启动jar打包到./目录中 -->
<fileSet>
<directory>${basedir}/target</directory>
<outputDirectory>.\</outputDirectory>
<fileMode>0755</fileMode>
<includes>
<include>${project.name}-${project.version}.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>

经过上述的配置便可指定打包成相应的.tar.gz压缩包,默认打包出来的格式为${project.name}-${project.version}-${assembly.id}.tar.gz,也可通过以下配置进行更改

			<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

Maven-常用插件的更多相关文章

  1. maven常用插件pom配置

    一.问题描述: 部署一个maven打包项目时,jar包,依赖lib包全部手动上传至服务器,然后用maven部署报错:Exception in thread "main" java. ...

  2. Maven常用插件

    maven利用各种插件来管理构建项目,本文记录下工作中常用到的插件及使用方法.每个插件都会提供多个目标(goal),用于标示任务.各插件配置在pom.xml里,如下: <build> [. ...

  3. maven常用插件总结

    maven本质上是一个插件框架,几乎所有的功能都是通过各种各样的插件来实现的.maven默认会依据项目类型自动把构建时的各阶段(Lifecycle和phase)自动绑定(Lifecycle Mappi ...

  4. maven常用插件配置详解

    常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...

  5. Maven常用插件简单配置

    好久不见,甚是想念.一日不见,如隔三秋. 从春节到现在已经很久没有回归博客园了,今天回来温习一下maven常用的一些插件的配置,学东西一个很简单的诀窍就是重复重复再重复,这样一定能把知识掌握的很牢靠. ...

  6. [maven] 常用插件解析

    参考资料:http://my.oschina.net/zh119893/blog/276090 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完 ...

  7. 【转】maven常用插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  8. Maven学习总结(22)——Maven常用插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  9. maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项

    一.指定编译文件的编码 maven-compile-plugin <plugin> <groupId>org.apache.maven.plugins</groupId& ...

  10. maven常用插件配置

    1.maven-jar-plugin插件 <!-- 排除资源文件中的properties文件,不需要打到jar中,后面通过assembly插件打包到conf目录中 --><plugi ...

随机推荐

  1. 【树状数组】Bzoj1878[SDOI2009] HH的项链

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...

  2. [Usaco2007 Open]Fliptile 翻格子游戏 状压dp

    n,m<=15,直接搞肯定不行,考虑一行一行来, 每一行的状态只与三行有关,所以从第一行开始枚举,每一次让下面一行填上他上面那行的坑 最后一行必须要同时满足他自己和他上面那行,否则舍去 #inc ...

  3. codeForces 472D 最小生成树

    题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点 prim最小生成树,若原图是树,则最小生成树的距离就是原距离.否则不是. 搞出来树了,第二问随便dfs就好了. #inc ...

  4. BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治

    BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治 Description     在得知了自己农 ...

  5. hello spring春天来了

    这是小小小零食  废话不多说 现在看到 spring这个管家 先说第一个 ioc :在每个框架的中都有一个容器的概念,所谓的容器就是将常用的服务,封装起来,然后,用户只需要遵循一定的规则,就可以达到统 ...

  6. Uber无人驾驶致命车祸翻案:6秒前已侦测到死者

    此前有消息称,今年三月 Uber 无人驾驶汽车致命车祸是软件失误导致的.现在,美国运输安全委员会的事故初步调查报告给出了不同的说法. 从图中可见,黄色线以米为单位显示,橙色线显示了地图线路的中心,紫色 ...

  7. mybatis 异常Result Maps collection does not contain value for java.lang.String

    Result Maps collection does not contain value for java.lang.String 以上是我报的错. 只要报Result Maps collectio ...

  8. MYSQL—— 基础入门,select 查询涉及到的关键字组合详解(进阶篇)

    SELECT查询组合使用的关键字很多,首先将最简单常用的关键字进行区分及使用,后续再继续补充............ 以下所有的关键字组合使用,主要以两个表students与students_scor ...

  9. a标签跳转之前加点击事件

    ①在html标签中出现提示 <a href="http://www.baidu.com" onclick="if(confirm('确认百度吗?')==false) ...

  10. 在ASP.NET Core中使用EPPlus导入出Excel文件

    这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...