回顧上次紀錄的Java - Use command line to export Runnable JAR file,主要透過command line的方式使用Java jar tool來打包Runnable jar,在管理小型的專案還可以,引用到的外部library也不多,但一旦需要引用到許多的library,同時又須打包出多個jar檔,且又要做自動unit test等行為的話,光是用jar tool已經不敷使用了! 因此,還是得學習如何使用自動建構工具,在此就記錄如何使用Maven來建構一Runnable JAR!
Maven下載後自行解壓縮,設定環境變數
command line執行mvn
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>
<groupId>com.zhibin.javaexample</groupId>
<artifactId>FileTransfer</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<url>https://maven.apache.org</url>
...
</project>
需特別定義的如下:
groupId → 組織名稱
artifactId → 輸出的JAR名稱
packaging → 包裝的型態
version → JAR名稱後接的版本號,如FileTransfer-1.0.jar
<url></url>之後接續設定dependency
<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
<!-- <scope>system</scope>
<systemPath>${basedir}/lib/commons-codec-1.15.jar</systemPath> -->
</dependency>
</dependencies>
目的是針對project內引用到的library做相依性設定,設定好這library的groupId、artifactId及version等資訊,當執行maven build後會先到repository尋找,沒有的話就會進行下載!
maven的repository預設位置在${user.home}/.m2/repository,可至${M2_HOME}/conf/settings.xml內進行調整
若要直接引用project內已下載的library,可多設定如下:<scope>system</scope>
<systemPath>${basedir}/lib/commons-codec-1.15.jar</systemPath>
${basedir}指的是project根目錄
再來是設定property屬性
<properties>
<src.dir>src</src.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
properties內可自行定義tag及value,到時pom內的其他tag就可以直接設定這個變數參照其value
最後是設定build tag
<build>
<sourceDirectory>${src.dir}</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<!-- Attach the shade into the package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>main.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
首先指定source code的進入點,將property的變數設定在此,即在src目錄下
而build tag下可設定plugin,如搭配maven-shade-plugin目的是project在輸出JAR檔時,META-INF下的MANIFEST.MF可指定Main-Class的程式進入點
最後是執行maven build,在此利用eclipse plugin來執行
Goals的欄位設定要執行的build Lifecycle,在此設定clean package
何謂package? 官網說明如下:
留言
張貼留言