關於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官方的插件庫總覽
