使用Maven構建Java工程(Building Java Projects with Maven)
Building Java Projects with Maven
本文采用maven構建一個簡單的java工程。
工程描述
你將實現一個顯示時間的應用,并采用maven構建它。
準備工作
- 大約15分鐘
- 一個文本編輯器或者IDE
- JDK 6或更高
如何完成
如同所有的Spring入門教程,你可以選擇一步一步的自己實現,也可以跳過基本的設置步驟。最終,你都將得到一份可以正常運行的代碼。
如果選擇按步實現,繼續下一節。
如果選擇跳過基本的安裝部分,則執行以下命令從github獲取代碼:
git clone https://github.com/spring-guides/gs-maven.git
切換當前目錄到gs-maven/initial,跳到安裝Maven步驟。
設置工程
首先,要創建一個java工程。
創建目錄結構
在你選定的工程目錄下,建立如下子目錄結構;例如,在*nix系統中使用mkdir -p src/main/java/hello命令:
└── src └── main └── java └── hello在src/main/java/hello目錄下,可以創建任何java類文件。這里我們創建兩個文件作為示例:HelloWorld.java和Greeter.java。兩個文件的源代碼如下。
package hello;public class HelloWorld { public static void main(String[] args) { Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); } }</pre>
package hello;public class Greeter { public String sayHello() { return "Hello world!"; } }</pre>
現在已經創建了一個java工程,下一步是安裝maven。Maven可以從http://maven.apache.org/download.cgi下載。只需要二進制文件,即apache-maven-{version}-bin.zip或者apache-maven-{version}-bin.tar.gz文件。
下載zip文件后,解壓,并把其bin目錄添加到系統path中。(環境變量)
可以執行以下命令,測試Maven是否安裝成功:mvn -v。如果安裝成功,則會得到類似的輸出:
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 07:51:28-0600) Maven home: /usr/share/maven Java version: 1.7.0_09, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac"定義一個簡單的Maven build
Maven已經安裝成功,現在要創建一個Maven工程定義。Maven工程通過一個稱作pom.xml的XML文件定義。這個文件描述了工程的名稱、版本、依賴(dependencies)等。
在工程根目錄下創建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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework.gs</groupId> <artifactId>gs-maven-initial</artifactId> <version>0.1.0</version> <packaging>jar</packaging> </project>
除了<packaging>標簽外,這是一個pom.xml文件的最精簡配置。它包含了工程配置的下述細節:
- <modelVersion>。POM 模型版本(通常是4.0.0)
- <groupId>。工程隸屬的團體或組織。通常采用逆序的域名。
- <artifactId>。工程庫文件的名稱。(如,工程的jar文件或war文件的名稱)
- <version>。工程的版本
- <packaging>。工程如何打包。默認為“jar”采用JAR打包,“war”采用WAR打包。
如果需要選擇版本方案,Spring推薦使用[semantic versioning](http://semver.org)。現在,我們有了一個最小的可用的Maven工程。
Build Java Code
Maven目前已經準備就緒。你可以采用Maven執行多個構建生命周期目標,包括編譯工程代碼,創建庫包(例如jar包),把庫安裝到本地Maven依賴倉庫。
執行下述命令:
mvn compile
這條命令指示Maven執行compile目標。執行結束后,target/classes 目錄下將生成.class文件。
由于我們不太可能想要直接發布或使用.class文件,因此下一步需要執行package目標:
mvn package
package目標將會編譯java代碼、執行所有的測試、最后將代碼打包到target目錄下的一個jar文件中。該jar文件的文件名基于工程的<artifactId>和<version>配置。例如,根據前述的pom.xml文件的配置,JAR文件的名稱為gs-maven-initial-0.1.0.jar。
如果把<packaging>項的值設置從“jar”改為“war”,target目錄下將生成一個WAR文件。
Maven也在本地維護了一個依賴倉庫以支持快速訪問工程依賴(本地倉庫通常位于用戶根目錄中的.m2/repository目錄下)。如果你想把你的JAR文件添加到本地倉庫中,執行以下install目標:
mvn install
install目標將會編譯、測試、打包、并將其復制到本地倉庫中。這樣其他工程就可以引用它。
下面介紹聲明dependencies。
聲明dependencies
上述的Hello World示例是自包含的,沒有依賴任何其他的庫。但是,多數的應用程序都會依賴外部庫處理一些公共邏輯和復雜功能。
例如,你想在上面的工程中再添加一個打印當前時間的功能。雖然你可以使用java原生庫提供的功能,但是Joda時間庫提供了更多有趣的功能。
首先,修改HelloWorld.java文件:
package hello;import org.joda.time.LocalTime;
public class HelloWorld { public static void main(String[] args) { LocalTime currentTime = new LocalTime(); System.out.println("The current local time is: " + currentTime);
Greeter greeter = new Greeter(); System.out.println(greeter.sayHello());
} }</pre>
HelloWorld采用Joda Time的LocalTime類來獲取和打印當前時間。現在執行mvn compile來構建工程,構建就會失敗,這是由于你還沒有將Joda Time聲明為一個依賴。這就需要在pom.xml中添加一下行(在<project>元素內):
<dependencies> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> </dependencies>
上述配置聲明了工程的依賴列表。在這里只聲明了一個Joda Time庫的依賴。在<dependency>元素內,包含以下三個子元素:
- <groupId>。依賴隸屬的組織或機構。
- <artifactId>。庫。
- <version>。版本。
默認情況下,所有的依賴都劃歸compile依賴的范疇。也就是說,他們應該在編譯時可用(如果你在構建一個WAR文件,包含/WEB-INF/libs目錄)。此外,<scope>元素的值也可以設置為以下兩種:
- provided - 編譯工程代碼必須的依賴,但是在執行時執行代碼的容器將會提供(如,Java Servlet API)
- test - 用于編譯和執行測試的依賴,但構建和執行工程的執行時代碼時不需要。
現在,執行mvn compile或者mvn package,Maven將會從Maven中心倉庫中解析Joda Time依賴,并成功構建工程。
下面是完整的pom.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0 ; <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>gs-maven</artifactId> <packaging>jar</packaging> <version>0.1.0</version><dependencies> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>hello.HelloWorld</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
</project></pre>
注意:上述完整的pom.xml文件采用Maven Shade Plugin構建jar文件Summary
你已經創建了一個簡單的基于Maven構建的Java工程。
原文鏈接:http://spring.io/guides/gs/maven/
來自: http://blog.csdn.net//kingzone_2008/article/details/18717553