2015
Nov
04

Maven 是一個 Java 的工具,可以用來幫你下載 Java LibrariesJava 已經存在非常多年,網路上有很多 Java 相關的 Libraries ,如果你手動一個一個下載回來安裝,再手動輸入長長的指令去載入這些 libraries ,這個做法會浪費太多的時間,而且一般人的記憶力也沒這麼好,記不下這麼多 libraries ,所以透過 Maven 就可以輕鬆的搞定所有事情。

安裝 Maven

請到下面這個網址下載 Maven 原始檔。

我的 Linux 系統安裝 Maven 方式如下: (2015/11/16)

如果你是用 windows 系統,請參考下面這個官方教學網址 http://maven.apache.org/install.html

到了這裡就算安裝完成了 ,你可以用 terminal 輸入 mvn --version 來測試看看有沒有安裝成功,例如我輸入 mvn 就會看到 mvn 有正確執行。

Example
  1. $ mvn --version
  2. source ~/.bash_profile && mvn --version
  3. Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
  4. Maven home: /home/puritys/apache-maven-3.3.3
  5. Java version: 1.7.0_85, vendor: Oracle Corporation
  6. Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85-2.6.1.2.el7_1.x86_64/jre
  7. Default locale: en_US, platform encoding: UTF-8
  8. OS name: "linux", version: "3.10.0-229.el7.x86_64", arch: "amd64", family: "unix"

環境變數設定

安裝 Maven 完成後,還要記得補一個環境變數叫 "M2" ,這個變數很重要,一定要設定,習慣上會直接設定成個人目錄下的 .m2,設定好之後,未來只要你用 Maven 安裝 Java Libraries , Maven 就會自動裝到 ~/.m2 這個目錄裡面 。

增加 M2 環境變到檔案 .bash_profile
  1. export M2=~/.m2

建立一個 Maven Project

mvn archetype:generate -DgroupId=com.example -DartifactId=example -DinteractiveMode=false

執行上面這個指令, Maven 就會自動建立出 example 這個檔案夾,並且建立 pom.xml, src, main, test, App.java 這些目錄與檔案,你要開發的 source code 是放在 src/main 底下,而測試程式很明顯的要放在 test 底下。

src/main/java/example/App.java 這個程式是 Maven 自動建立的,現在我們來使用 Maven 編譯並執行這支程式。

  • mvn compile
  • mvn exec:java -Dexec.mainClass="com.example.App"

compile 為編譯程式,Maven 會自動裝 src/main 底下的程式所以拿出來編譯,然後放在 target 這個目錄底下,而 mvn exec:java -Dexec.mainClass="com.example.App" 這個指令則是告訴 Maven 我們要執行的程式叫 "com.example.App" ,這是 App.java 這個檔案的 Package Name ,在 Java 的世界裡每支程式都有自已的 package 名稱,package 名稱要跟符合檔案的路徑,而且最後一個點後面的名稱一定要跟檔名一樣,所以 com.example.App 會指向 com/example/App.java 這個檔案。

Unit test

在 test/java/com/example/ 底下有一個 AppTest.java 的程式,這也是 Maven 預設幫我們建立好的 Unit test 範例,我們可以使用指令 mvn test 來直接執行測試程式。

  • mvn test

Maven project setting pom.xml

pom.xml 是 Maven 專用的 project 設定檔,你可以在這個檔名加上你需要的 Libraries, Maven 就能夠自動下載你指定的 Libraries ,例如預設 Maven 已經幫我們在 pom.xml 中加入了 junit 這個 unit test 的 Library 。

我安裝的 Maven 是 3.3.3 版,它預設幫我們建的 junit 版本會是 3.8 版,這個版本太舊了,某些功能無法使用,請記得手動直接升上 4.12 。

pom.xml
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.example</groupId>
  5. <artifactId>maven</artifactId>
  6. <packaging>jar</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>maven</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>4.12</version>
  15. <scope>test</scope>
  16. </dependency>
  17. </dependencies>
  18. </project>

載入 local 端 maven package

有時候我們要在 A project 找另一個 library B 的 bug ,但預設 Maven 只會去下載遠端的 library ,其實只要加入 systemPath 跟 scope 這兩個參數就行了。

Example
  1. <dependencies>
  2. <dependency>
  3. <groupId>javax.sql</groupId>
  4. <artifactId>jdbc-stdext</artifactId>
  5. <version>2.0</version>
  6. <scope>system</scope>
  7. <systemPath>${java.home}/lib/rt.jar</systemPath>
  8. </dependency>
  9. </dependencies>

先到 Library B 執行 mvn package ,目錄 target 就會出現 ***.jar 的檔案,然後再回到 A 專案,修改 pom.xml 在 dependency 加入 B 的設定,並指定 system Path 就行了。

問題處理

mvn Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher

我第一次安裝的時候有碰到這個問題,原因是因為我下載到 apache-maven-3.3.3-src.tar.gz 這個檔案,只要重新下載 apache-maven-3.x.x.bin.tar.gz 這個檔案就可以了。

相關文章


回應 (Leave a comment)