maven(一)maven自带的插件
关于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官方的插件库总览