使用Maven構建Java工程(Building Java Projects with Maven)

jopen 8年前發布 | 11K 次閱讀 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!