領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Apache Maven 是一個流行的開源工具,它提供了一種約定優於配置的方法來管理專案構建。事實上,Eclipse Community Surveys 顯示 Maven 的採用率從2009 年的 8% 增長到2010 年的 28%,這凸顯了它在各種專案設定中的有用性。即使您可以在不使用 Maven 的情況下使用 Spring,但仍有許多理由建議 Spring 開發人員使用它。在本文中,我將向您展示如何開始使用 Maven,以及如何成功地將其與 Spring 庫、倉庫和工具(如SpringSource Tool Suite 和Spring Roo)結合使用。
Maven 處理專案構建。如果您的專案遵循 Maven 的約定,Maven 可以相對輕鬆地提供強大的功能和複雜性。它是宣告式的;您描述*要*做什麼,而不是*如何*做。如果您來自 Make 或 Ant 等傳統的構建工具,這種方法會顯得不同。
您在 Maven 專案配置中宣告專案的依賴項。然後,這些依賴項會被為您解析並下載。這類似於許多不同作業系統中的包系統。假設您使用的是 OS X 的 fink 或 ports 命令列工具。要更新作業系統的功能,使用者會在管理客戶端中選擇一個包(例如,最新的安全補丁,或新版本的 glib 庫)來安裝,然後指示客戶端從稱為包倉庫的已知伺服器下載並安裝它。下載包後,包管理器會檢視包的清單,其中列出了該包所依賴的所有庫(位於其他包中)——其傳遞依賴項。這些也會被下載。
如果你還沒有安裝 Maven,有幾種安裝方法。你可以從 Apache 網站 下載。選擇一個較新的版本。目前,很多人在使用 Maven 2.21,或者最近釋出的 Maven 3。下載你想要使用的版本,然後將其解壓到你選擇的目錄。另外,許多作業系統在包系統中提供了 Maven 2 的構建(很快也會有 Maven 3 的構建)。例如,在 Ubuntu 上,你可以執行 sudo apt-get install maven2 。如果你使用的是 SpringSource Tool Suite(可在此免費下載),那麼你無需擔心,Maven 已經下載幷包含在你的 STS 安裝資料夾中了。無論你如何將 Maven 二進位制檔案安裝到你的系統上,都要確保該二進位制檔案在作業系統的搜尋路徑中。通常,這隻需要將 Maven 安裝目錄下的 bin 資料夾新增到作業系統的 PATH 變數中即可。最好也為 Maven 安裝本身建立一個名為 MAVEN_HOME 的系統變數。在 Unix(包括 OS X)或 Linux 機器上,設定方法大同小異。在我的機器(一臺 Ubuntu Linux 機器)上,它是這樣的:
export MAVEN_HOME=/home/jlong/bin/springsource/maven-2.2.1.RELEASE export PATH=$PATH:$MAVEN_HOME/bin
要進行測試,請開啟一個新的 shell 併發出以下命令
mvn --version
您應該會看到一些輸出,確認命令存在於您的系統中,如下所示
jlong@jlong-mbp:~/Desktop/code$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700) Java version: 1.6.0_22 Java home: /usr/lib/jvm/java-6-sun-1.6.0.22/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux" version: "2.6.35-22-generic" arch: "amd64" Family: "unix" jlong@jlong-mbp:~/Desktop/code$
Maven 專案假定有一個標準的目錄結構,該結構至少看起來像這樣
./pom.xml ./src ./src/main ./src/main/java ./src/main/resources ./src/test ./src/test/java ./src/test/resources
目錄結構的最頂層是一個 XML 檔案(始終稱為 pom.xml),Maven 期望在該位置找到它。pom.xml(POM 是 Project Object Model 的縮寫)描述了專案特有的、無法自動推斷的內容,例如依賴項、專案名稱等。
| 目錄 | 描述目錄內容(相對於專案根目錄) |
|---|---|
| src/main/java | 包含專案的 Java 原始碼 |
| src/main/resources | 包含專案任何類路徑相關的資源(例如,Spring 應用程式上下文 .xml 檔案) |
| src/test/java | 包含你的測試類的 Java 原始碼。此目錄不會包含在最終構建中。此處的所有測試都將被編譯並執行。如果測試失敗,則中止構建。 |
| src/test/resources | 此目錄不會包含在最終的 Java 構建中。此資料夾包含你的測試程式碼的任何類路徑相關的資源(例如,一個 Spring 應用程式上下文 .xml 檔案)。 |
讓我們構建一個使用 Spring Framework 的簡單 Maven 專案。在你的硬碟上建立一個類似上面的目錄結構。如果你使用的是類 Unix 作業系統,你可以使用以下命令來處理專案目錄內的目錄設定:
mkdir spring-example1;
cd spring-example1;
mkdir -p src/{test,main}/{java,resources}
建立一個名為 pom.xml 的文字檔案。在檔案中輸入以下內容:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springsource.greenbeans.maven</groupId>
<artifactId>example1</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Our Simple Project</name>
</project>
現在讓我們暫時忽略此檔案的內容。我們只需要知道該檔案的內容足以唯一標識專案給 Maven,並讓 Maven 完成它的工作。讓我們直接跳到重點:在專案的根資料夾中 - 與 pom.xml 同一個資料夾 - 在命令列上執行以下命令:
mvn install
第一次執行時,這可能需要(相當)長的時間。你會在螢幕上看到大量的下載進度數字快速滾動。這些進度數字表明 Maven 的依賴項和外掛正在被下載。Maven 沒有構建“目標”的概念。相反,Maven 有一個生命週期階段的概念。這裡,install 是一個階段。這些階段按順序依次呼叫。對於每個階段,都有預打包的外掛被註冊並在每個階段呼叫。Maven 已經配置了良好的預設外掛,所以你通常不需要過多處理,但瞭解正在發生什麼是有幫助的。使用者可以覆蓋或新增外掛,並配置它們在任何所需的階段執行。當一個階段被呼叫時,所有在其之前的階段都會首先被呼叫。以下是標準階段以及對每個階段意圖的解釋。請記住,不同的專案可能會為這些階段配置不同的外掛。
| 階段 | 描述 |
|---|---|
| validate | 對專案本身進行健全性檢查 |
| compile | 編譯原始碼 |
| test | 執行編譯後的測試類(委託給特定的單元測試外掛執行程式,如 jUnit 或 TestNG) |
| package | 從編譯後的程式碼和類路徑資源生成一個工件,並將其儲存在專案根目錄的 target 資料夾中 |
| integration-test | 處理並部署打包的工件到整合測試環境 |
| verify | 執行檢查以確認包是否有效 |
| install | 將打包的工件安裝到你的本地儲存庫。你的本地儲存庫是一個資料夾,其中儲存和快取了所有下載的依賴項。後續嘗試解析快取中已有的依賴項的構建將不會重新下載依賴項,而是使用本地儲存庫中的依賴項。通常,它位於你的主目錄下的 .m2 資料夾中,名為 repository。因此,在我的系統上,這將是 /home/jlong/.m2/repository |
| deploy | 將最終工件複製到另一個環境。通常是一個共享伺服器,以便不同的團隊可以共享一個共享依賴項。 |
所以,Maven 構建遵循階段,並且每個專案最終透過執行這些階段來產生一個工件。你可以透過在 pom.xml 檔案中指定 <packaging> 元素來更改生成的工件型別。在上面的示例中,我們省略了 packaging 元素,因此預設為 jar 型別。其他打包型別包括 war 和 ear。
考慮到以上所有因素,我們上面簡單的呼叫應該顯得相當強大了!
mvn install 指示 Maven - 除其他事項外 - 下載所有外掛和依賴項(如果尚未下載並快取),編譯原始碼,執行單元測試,構建一個 .jar 檔案,將生成的 .jar 檔案安裝到專案根目錄下的 target 資料夾中,並將生成的 .jar 檔案安裝到本地儲存庫 ~/.m2/repository。由於階段是標準的,目錄是標準的,預設配置的外掛也是標準的,因此你應該能夠獲取任何 Maven 專案,並執行 mvn install,並可預測地獲得一個經過測試、可用的二進位制檔案。
有時你希望 Maven 丟棄“target”資料夾中的所有內容並從頭開始。為此,你可以在“install”命令之前使用“clean”命令。這將刪除任何預先構建的二進位制檔案,然後安裝工件。
mvn clean install
所有 Maven 專案都可以透過其 artifactId、groupId 和 version 元素的組合來唯一標識。這些資訊提供了專案的“座標”。我們在 pom.xml 檔案中指定的資訊告訴 Maven 我們專案的座標。Maven 可以透過指定具有唯一座標的依賴項,在編譯和執行期間自動將其他工件(依賴項)新增到專案的類路徑中。以下是座標三個最重要的部分的概述。
| 座標元素 | 描述 |
|---|---|
| groupId | groupId 可以是任何東西。可以將其視為構建的 Java 包。通常,它是你的組織域與專案的組合。例如,Spring Integration 專案的 groupId 是:org.springframework.integration |
| artifactId | artifactId 是 groupId 中此特定工件的名稱。一個 groupId 可能對許多不同的工件通用,這些工件共同描述了一個完整的系統。ArtifactIds 可以根據目的、模組名稱或任何其他區分符來命名。Spring Integration File 支援具有以下 artifactId:spring-integration-file |
| 版本 | 這是專案的版本。Maven 版本可以是固定數字,也可以是 SNAPSHOT。專案的最終 GA 版本可能是 1.0 或 3.5 等。然而,在開發過程中,相同的專案被認為是最終釋出的快照。Maven 可以透過 SNAPSHOT 字尾來適應這一點,該字尾告訴 Maven“獲取最新構建”。一個示例版本可能是 1.0-SNAPSHOT,這翻譯為“1.0 的最新構建”。 |
我們的專案唯一地標識了自己
<groupId>org.springsource.greenbeans.maven</groupId>:<artifactId>example1</artifactId>:<version>1.0-SNAPSHOT</version>
一旦你 installed 了這個專案,任何其他專案都可以透過將其作為依賴項新增到你的 Maven pom.xml 檔案中來依賴它。這對其他專案也同樣有效。讓我們修改 pom.xml 以依賴 Spring Framework。你的新 pom.xml 檔案將如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springsource.greenbeans.maven</groupId>
<artifactId>example2</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Our Simple Project</name>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
</dependencies>
</project>
重新執行 mvn install,你應該會開始看到 Spring Framework 庫 - 以及它所依賴的庫 - 被下載下來。檢查輸出,你會看到 Maven 從公共儲存庫 http://repo1.maven.org 下載依賴項。有許多公共儲存庫,Maven 預設會諮詢其中幾個。這些儲存庫只是具有目錄的 HTTP 伺服器。你通常可以在瀏覽器中檢查它們來搜尋你想要的特定依賴項。例如,如果你想檢視所有可用的 Spring Framework 依賴項,你可能需要瀏覽到 URL http://repo1.maven.org/maven2/org/springframework/。要檢視所有 Spring Integration 依賴項,請瀏覽到 http://repo1.maven.org/maven2/org/springframework/integration/。要檢視所有 Spring Batch 依賴項,請瀏覽到 http://repo1.maven.org/maven2/org/springframework/batch/ 等。SpringSource 還維護著幾個 Maven 儲存庫,其中包含我們最新的依賴項,例如 http://maven.springframework.org 和 spring-roo-repository.springsource.org
這些儲存庫都遵循通用佈局,並且它們都包含關於儲存在標準位置的每個工件的元資料。這種儲存庫結構已成為事實上的標準,現在其他工具消費它們非常普遍。除了 Maven 之外,還有其他更專業的構建工具現在消費和生成與 Maven 相同的元資料。
Maven 的預設設定對於大多數構建來說已經足夠了,但偶爾你會發現有必要在構建階段期間調整 Maven 的行為,或者偶爾新增一個可以獨立於任何階段呼叫的功能。在 Maven 中,你使用外掛來更改這些設定。我經常改變的一件事是編譯器的語言支援。我通常想使用 Java 5 或更高版本,而 Maven 2 的預設行為是 1.4。我們將覆蓋預設的 Maven 編譯器行為並配置特定的語言相容性。下面是更新後的 Maven 專案檔案。
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springsource.greenbeans.maven</groupId>
<artifactId>example2</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Our Simple Project</name>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
有大量的外掛可用,還有許多其他外掛由各種社群專案貢獻。一個常見的外掛用途是將 aspectj-compiler 外掛新增到 compile 階段,以確保 AspectJ aspect 被正確編譯。另一個常見的需求是為基於 WSDL 的 Web 服務合同生成 Java 介面。通常,一個外掛可以獨立使用,不與任何特定的構建階段繫結。Maven 允許你呼叫單個外掛,而無需呼叫整個構建。外掛通常提供幾個特定的命令。要呼叫外掛,請使用以下形式:
mvn [plugin-name]:[command-name]
外掛名稱可以是一個別名,也可以是一個完全限定的外掛名稱。來自 Maven 專案儲存庫的外掛是別名的,易於使用。一個非常有用的外掛是 Maven 依賴外掛。依賴外掛支援許多命令。人們常見的需求是獲取附加到給定專案的(傳遞的或非傳遞的)所有依賴項的清單。Maven 依賴外掛可以列印一個樹,顯示專案中所有依賴項。像這樣呼叫它:
mvn dependency:tree
注意:此外掛的輸出在 Maven 3 中不可靠,STS 還包含了一個相關的依賴項的視覺圖。在我的系統上,輸出如下:
jlong@jlong-mbp:~/Desktop/mavenspring/code/example1$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Our Simple Project
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.springsource.greenbeans.maven:example1:jar:1.0-SNAPSHOT
[INFO] +- log4j:log4j:jar:1.2.16:compile
[INFO] +- org.springframework:spring-jdbc:jar:3.0.5.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile
[INFO] | +- org.springframework:spring-core:jar:3.0.5.RELEASE:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | \- org.springframework:spring-tx:jar:3.0.5.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile
[INFO] | +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile
[INFO] | +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile
[INFO] | \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile
[INFO] \- junit:junit:jar:4.5:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Wed Jan 10 02:07:36 PST 2011
[INFO] Final Memory: 22M/279M
[INFO] ------------------------------------------------------------------------
jlong@jlong-mbp:~/Desktop/mavenspring/code/example1$
現在你知道了依賴圖的樣子。另一個常見問題是如何將所有依賴項彙集到一個資料夾中。這對於最近的 Spring Framework 使用者來說尤其常見。核心 Spring Framework 不再提供所有依賴項,因為像 Maven 這樣的工具可以更輕鬆地獲取所有依賴項。特別是 dependency 外掛使這更容易。執行 mvn dependency:copy-dependencies 命令,所有依賴項將被放入專案的 target/dependency/ 資料夾中。這是我係統上的輸出:
jlong@jlong-mbp:~/Desktop/mavenspring/code/example1$ mvn dependency:copy-dependencies
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Our Simple Project
[INFO] task-segment: [dependency:copy-dependencies]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:copy-dependencies {execution: default-cli}]
[INFO] Copying aopalliance-1.0.jar to /home/jlong/...example1/target/dependency/aopalliance-1.0.jar
[INFO] Copying commons-logging-1.1.1.jar to /home/jlong/...example1/target/dependency/commons-logging-1.1.1.jar
[INFO] Copying junit-4.5.jar to /home/jlong/...example1/target/dependency/junit-4.5.jar
[INFO] Copying log4j-1.2.16.jar to /home/jlong/...example1/target/dependency/log4j-1.2.16.jar
[INFO] Copying spring-aop-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-aop-3.0.5.RELEASE.jar
[INFO] Copying spring-asm-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-asm-3.0.5.RELEASE.jar
[INFO] Copying spring-beans-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-beans-3.0.5.RELEASE.jar
[INFO] Copying spring-context-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-context-3.0.5.RELEASE.jar
[INFO] Copying spring-core-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-core-3.0.5.RELEASE.jar
[INFO] Copying spring-expression-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-expression-3.0.5.RELEASE.jar
[INFO] Copying spring-jdbc-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-jdbc-3.0.5.RELEASE.jar
[INFO] Copying spring-tx-3.0.5.RELEASE.jar to /home/jlong/...example1/target/dependency/spring-tx-3.0.5.RELEASE.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Wed Jan 12 02:18:02 PST 2011
[INFO] Final Memory: 22M/279M
[INFO] ------------------------------------------------------------------------
jlong@jlong-mbp:~/Desktop/mavenspring/code/example1$
Maven 鼓勵可重現的構建。命令是標準的,階段、外掛配置和專案型別,都是標準的。任何安裝了 Maven 的開發人員都應該能夠獲取專案的原始碼及其 pom.xml 檔案,並精確地重建它,就像原始開發人員在其私人工作站上構建它一樣。理論上,不需要在構建檔案周圍閒逛來除錯構建邏輯,也很少需要採取特殊措施來設定構建所需的(屬性檔案、shell 變數等)環境。這個
Maven 的 pom.xml 檔案指定了構建專案所需的一切。它指定了編譯所需的庫,知道使用哪個編譯器,知道哪些原始碼放在哪裡。它知道你的專案的一切。因此,像 SpringSource Tool Suite 這樣的優秀工具包含(即 M2Eclipse 外掛,它為 Eclipse 衍生物提供了出色的 Maven 支援)直接匯入 Maven 專案的功能,這並不奇怪。首先,我們需要將專案匯入 STS。為此:轉到 File > Import > Maven > General,然後瀏覽到包含你的 pom.xml 的資料夾。
在這個例子中,我們已經將一個 Maven 專案匯入到 STS 環境中,但你也可以在 STS 中建立基於 Maven 的專案。STS 提供了許多使用 Maven 的模板專案,你可以訪問它們。只需轉到 File > New > Spring Template Project 並選擇其中一個專案。它們也基於 Maven,所以它們是快速入門的好方法。
你現在在 STS 中擁有了一個工作的 Maven 專案,並且可以立即開始編碼。瀏覽“Package Explorer”。你會看到專案中的一個“Maven Dependencies”庫,其中包含 Maven pom 中指定的依賴項以及傳遞依賴項。你還會注意到 M2Eclipse 外掛已正確添加了 Maven 在 STS 中所需的四個原始碼根目錄。
此時,我們已經有了一個工作的 STS 專案,它已經設定好了類路徑並且能夠正確構建。我不知道你怎麼樣,但我的第一反應是 - 這個專案感覺就像一塊乾淨的白板,迫不及待地等待著被描繪 - 就是開始編寫程式碼。畢竟,我還有工作要做!通常,我會新增 jUnit 並儲存 pom.xml 檔案。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
</dependency>
此時,STS 會自動更新專案中的 Maven 依賴項。
然後,我通常會新增一個日誌框架,並儲存它
```xml然後,我將開始新增我的任務所需的特定依賴項。假設我上週閱讀了關於 Green Beans 的帖子,並想利用 JDBC 和 Spring 的 JdbcTemplate,我將新增它:
就這樣!讓我們寫一些程式碼。這是 M2Eclipse Maven 整合的我個人最喜歡的特性之一。你看,親愛的讀者,我在程式碼中犯了很多錯誤。:-) 我花了很多時間執行和除錯程式碼。我通常會破壞一些東西,需要除錯我的程式碼和框架之間的互動。Maven 依賴項通常會隨附原始碼一起部署,因此 M2Eclipse 外掛可以自動為你下載原始碼。為了在實踐中看到這一點,讓我們看一下 JdbcTemplate 的程式碼。在 STS 中,轉到 Navigate > Open Type。輸入 JdbcTemplate,然後按 Enter。STS 最初會開啟 .class 檔案(預設行為),然後嘗試在後臺下載原始碼。幾秒鐘後,你應該就能看到 JdbcTemplate 的正確原始碼了。然後,你可以檢查程式碼並設定斷點,你可以在偵錯程式中逐步執行這些斷點。方便吧?

我們已經看到 SpringSource Tool Suite 是處理 Java(以及 Spring 和 Maven)程式碼的理想環境。使用 Maven 和 STS 可以輕鬆開始 Spring 專案。然而,Spring Roo 更容易,並且已經包含在 STS 中,並且可以輕鬆地在 STS 中使用。我個人政策是,只要可能,就讓“Spring Roo 來處理”。Spring Roo 為每個 Spring Roo 專案設定了一個優雅的 Maven 構建,因此建立 Spring Roo 專案本身就帶來了很多好處。讓我們建立一個 Spring Roo 專案(當然是使用 STS 的嚮導!),然後看看 Spring Roo 對 Maven 的支援如何簡化 Maven 構建的配置。
在 STS 中,轉到 File > New > Spring Roo Project。這將啟動 Spring Roo 嚮導。你會注意到嚮導允許你指定 Maven 的參與程度。保留預設設定 - Full Maven Build。
這將為你留下一個新的 Maven 專案,類似於我們的第一個示例。你需要重複上一個示例中包含資原始檔夾的步驟。和以前一樣,你可以獲得 STS 對 Maven 的所有支援,但現在你也可以透過 Spring Roo shell 與 Maven 專案配置進行互動和修改。首先,你可以使用 Roo shell 來安裝新建立的專案:
perform command --mavenCommand install
這等同於執行我們之前的 mvn install。你應該對任何新建立的 Spring Roo 專案都執行它。Spring Roo 還提供了方便的、可指令碼化的 shell 命令來新增和刪除 Maven 依賴項。要新增 Spring Integration 框架(特別是與檔案系統相關的支援),你可能會發出以下命令:
dependency add --groupId org.springframework.integration --artifactId spring-integration-file --version 2.0.0.RELEASE perform package
perform package 命令會生成一個完全構建的工件,因此使用此命令構建的 .war 專案(例如)就可以立即部署到你的容器中了。還有一個命令 dependency remove,可用於從 Maven 專案中刪除依賴項。
在這篇文章中,我們探索了 Apache Maven,一個構建和專案理解工具。我們研究了 Maven 的約定優於配置理念和宣告式依賴管理如何簡化專案構建。為了簡化,我們然後使用了 STS,它預裝了 Apache Maven、M2Eclipse 外掛和 Spring Roo。