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 這個檔案就可以了。

相關文章

網頁好讀版