关于org.apache.maven.plugins

前言

maven提供了很多插件给我们使用,解释3个java环境常用的maven插件, maven-jar-plugin, maven-complier-plugin, maven-assembly-plugin.

maven-jar-plugin

Maven提供的打jar包的插件,有点类似idea自带的jar打包工具。

Maven-jar-plugin可以自定义主类,从而打成一个可执行的jar

例子

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<!--不声明主类会无法运行-->
<mainClass>com.xxx.Main</mainClass> <!--添加依赖classpath配置到MANIFEST文件-->
<addClasspath>true</addClasspath>
</manifest>
<!--可以添加key/value到生成的manifest-->
<manifestEntries>
<!--Class-Path是classpath关键字,这跟运行环境的依赖路径有关-->
<key1>value1</ key1>
</manifestEntries>
</archive>
<!--这些不打进包-->
<excludes>
<exclude>config/*.*</exclude>
</excludes>
</configuration>
</plugin>

archive细节参考

http://maven.apache.org/shared/maven-archiver/index.html

其他可以自定义很多内容,比如选择打包的内容,不打包的内容,自定义MANIFEST文件(可以通过JarFile.getManifest来获取key/value),

MANIFEST文件内包含了jar的信息,包括版本,主类,classpath等

关于manifest文件说明

http://maven.apache.org/shared/maven-archiver/examples/manifest.html

maven-compiler-plugin

Maven提供的编译java源码的插件,比如指定编译的jdk版本,编译编码(UTF-8)之类

例子

<plugin>
<!--用于声明编译的相关配置,若不声明,则maven采用默认的相关配置 本来处理,可能会出现问题-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!--声明源代码的jdk版本-->
<source>1.8</source>
<!--声明生成目标的jdk版本-->
<target>1.8</target>
<!--声明编译文件的编码-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>

//compiler插件详细资料

http://maven.apache.org/plugins/maven-compiler-plugin/

maven-assembly-plugin

Maven提供的自定义打包的插件,制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。maven-assembly-plugin支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的,例如用户可以按文件级别的粒度、文件集级别的粒度、模块级别的粒度、以及依赖级别的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly-plugin要求用户使用一个名为assembly.xml的元数据文件来表述打包

1.pom.xml声明部分简单例子

<plugin>
<!--可以不声明groupId 因为groupId是默认的-->
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<!-- 官方说法 this is used for inheritance merges 感觉没什么用...-->
<id>make-assembly</id>
<!-- 绑定到maven的package操作 生命周期阶段上,也可以用绑定到install操作 -->
<phase>package</phase>
<goals>
<!-- 和phase的package组合使用 -->
<goal>single</goal>
</goals>
<configuration>
<!--不在生成的压缩包名称中添加assemblyId(在描述文件定义的id)-->
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<!--自定义描述文件路径-->
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

2.assembly.xml描述部分

<?xml version="1.0" encoding="UTF-8"?>
<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,例如xxxx-package.zip-->
<id>package</id>
<formats>
<!--支持常见的包格式,例如zip,tar,tar.gz,jar,war等-->
<format>zip</format>
</formats>
<!--相当于压缩包的目录,默认是有的,(解压后是平铺还是有个目录.)-->
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}\src\main\</directory>
<includes>
<include>sbin/*.sh</include>
</includes>
<!--换行符格式,windows是\r\n,unix是\n等-->
<lineEnding>unix</lineEnding>
<!--类似与unix的acl,read是4,write是2,execute是1;默认是0644-->
<fileMode>0755</fileMode>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.basedir}\src\main\resources\</directory>
<includes>
<include>*.properties</include>
</includes>
<outputDirectory>/conf</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<includes>
<include>*.jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</fileSet>
</fileSets>
</assembly>

//maven官网对assembly的解释

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

//maven官方的插件库总览

http://maven.apache.org/plugins/index.html

maven(一)maven自带的插件的更多相关文章

  1. maven打包需要设置main-class的插件写法

    maven打包需要设置main-class的插件写法 <build> <plugins> <plugin> <groupId>org.apache.ma ...

  2. Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)

    学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用)   做maven开发前提: 1.编码UT ...

  3. Maven 入门——Maven 的安装和配置

    1.安装 Windows 环境 Maven 官网下载安装文件 解压到指定目录 配置环境变量(M2_HOME) cmd 输入 mvn -v Mac环境 brew install maven 配置环境变量 ...

  4. [Maven]Apache Maven 入门篇

    作者:George Ma 上 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 ma ...

  5. 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)

    [项目管理和构建]十分钟教程,eclipse配置maven + 创建maven项目(三) 上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合 ...

  6. eclipse配置maven + 创建maven项目

        登录|注册     努力+坚持,而且还很年轻   目录(?)[+] 在现实的企业中,以低成本.高效率.高质量的完成项目,不仅仅需要技术大牛,企业更加需要管理大牛,管理者只懂技术是远远不够的.当 ...

  7. eclipse配置maven + 创建maven项目(三)

    上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合,并我们创建一个maven的项目. 准备工作 在eclipse配置maven之前需要我们做 ...

  8. Maven:Maven 入门

    背景 几乎所有的主流平台都提供了依赖管理工具,如:.Net 的 Nuget.Ruby 的 Gem.Node 的 Npm等,今天简单的解释一下如何使用 Maven,以及最常见的问题. 下载 Maven ...

  9. (一)maven之——maven基础及本地仓库的配置

    一.初步了解maven Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(POM)的概念,提供了帮助管理构建.文档.报告.依赖.发布等方法,Maven简化和标准化项目建设过程.处 ...

随机推荐

  1. SpringMVC的@RequestParam

    以前写controller层的时候都是默认带上 @RequestParam 的, 今天发现不加@RequestParam 也能接收到参数 下面我们来区分一下加与不加的区别 这里有两种写法 @Reque ...

  2. 抄送(Carbon Copy)

    邮件中的抄送 举例,如果A发送邮件给B1,B2,B3,抄送给C1,C2,C3,密送给D1,D2,D3 那么: A知道自己将邮件发送给了B1,B2,B3,抄送给了C1,C2,C3,密送给了D1,D2,D ...

  3. JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

    Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++. Java开发,对象就在堆中,一般而言,堆中只有对象. ...

  4. 【多线程基础】- 多个线程顺序打印ABC

    题目:3个线程名字分别是A,B,C 现在在console上连续打印10次 ABC . public class Test { public static void main(String[] args ...

  5. mysql数据库优化的几种方法

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...

  6. centos7命令1

    ls  查看当前路径下的文件或文件夹 pwd 查看当前路径,例如/home/python   表示根目录下的home文件夹下的python文件夹 clear清空屏幕 /斜杠 \反斜杠 |竖杠 _下划线 ...

  7. .net:Code First 创建或更新数据库

    控制台输入命令: 切换到项目的project.json 文件所在文件 dotnet ef migrations add XXX dotnet ef database update Visual Stu ...

  8. mysql锁机制之间隙锁(Next-Key锁)(五)

    间隙锁(Next-Key锁) 当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的 索引项加锁:对于键值在条件范围内但并不存在的记录,叫做“间隙(GA ...

  9. vuex是什么?怎么用,例子

    什么是vuex? 官方的解释是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 为什么要用 ...

  10. mysql中explain的用法

    mysql中explain的用法 最近在做性能测试中经常遇到一些数据库的问题,通常使用慢查询日志可以找到执行效果比较差的sql,但是仅仅找到这些sql是不行的,我们需要协助开发人员分析问题所在,这就经 ...