Green Beans:Maven 和 Spring 入門

工程 | Josh Long | 2011 年 1 月 17 日 | ...

Apache Maven 是一個流行的開源工具,它提供了一種約定優於配置的方法來管理專案構建。事實上,Eclipse Community Surveys 顯示 Maven 的採用率從2009 年的 8% 增長到2010 年的 28%,這凸顯了它在各種專案設定中的有用性。即使您可以在不使用 Maven 的情況下使用 Spring,但仍有許多理由建議 Spring 開發人員使用它。在本文中,我將向您展示如何開始使用 Maven,以及如何成功地將其與 Spring 庫、倉庫和工具(如SpringSource Tool SuiteSpring Roo)結合使用。

Maven 處理專案構建。如果您的專案遵循 Maven 的約定,Maven 可以相對輕鬆地提供強大的功能和複雜性。它是宣告式的;您描述*要*做什麼,而不是*如何*做。如果您來自 Make 或 Ant 等傳統的構建工具,這種方法會顯得不同。

您在 Maven 專案配置中宣告專案的依賴項。然後,這些依賴項會被為您解析並下載。這類似於許多不同作業系統中的包系統。假設您使用的是 OS X 的 finkports 命令列工具。要更新作業系統的功能,使用者會在管理客戶端中選擇一個包(例如,最新的安全補丁,或新版本的 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 入門

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 型別。其他打包型別包括 warear

考慮到以上所有因素,我們上面簡單的呼叫應該顯得相當強大了!

mvn install 指示 Maven - 除其他事項外 - 下載所有外掛和依賴項(如果尚未下載並快取),編譯原始碼,執行單元測試,構建一個 .jar 檔案,將生成的 .jar 檔案安裝到專案根目錄下的 target 資料夾中,並將生成的 .jar 檔案安裝到本地儲存庫 ~/.m2/repository。由於階段是標準的,目錄是標準的,預設配置的外掛也是標準的,因此你應該能夠獲取任何 Maven 專案,並執行 mvn install,並可預測地獲得一個經過測試、可用的二進位制檔案。

有時你希望 Maven 丟棄“target”資料夾中的所有內容並從頭開始。為此,你可以在“install”命令之前使用“clean”命令。這將刪除任何預先構建的二進位制檔案,然後安裝工件。

mvn clean install

表明你的身份!

所有 Maven 專案都可以透過其 artifactIdgroupIdversion 元素的組合來唯一標識。這些資訊提供了專案的“座標”。我們在 pom.xml 檔案中指定的資訊告訴 Maven 我們專案的座標。Maven 可以透過指定具有唯一座標的依賴項,在編譯和執行期間自動將其他工件(依賴項)新增到專案的類路徑中。以下是座標三個最重要的部分的概述。

座標元素 描述
groupId groupId 可以是任何東西。可以將其視為構建的 Java 包。通常,它是你的組織域與專案的組合。例如,Spring Integration 專案的 groupId 是:org.springframework.integration
artifactIdartifactId 是 groupId 中此特定工件的名稱。一個 groupId 可能對許多不同的工件通用,這些工件共同描述了一個完整的系統。ArtifactIds 可以根據目的、模組名稱或任何其他區分符來命名。Spring Integration File 支援具有以下 artifactIdspring-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.orgspring-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$ 

在 SpringSource Tool Suite 中使用 Maven

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 log4j log4j 1.2.16 ```

然後,我將開始新增我的任務所需的特定依賴項。假設我上週閱讀了關於 Green Beans 的帖子,並想利用 JDBC 和 Spring 的 JdbcTemplate,我將新增它:

```xml org.springframework spring-jdbc 3.0.5.RELEASE ```

就這樣!讓我們寫一些程式碼。這是 M2Eclipse Maven 整合的我個人最喜歡的特性之一。你看,親愛的讀者,我在程式碼中犯了很多錯誤。:-) 我花了很多時間執行和除錯程式碼。我通常會破壞一些東西,需要除錯我的程式碼和框架之間的互動。Maven 依賴項通常會隨附原始碼一起部署,因此 M2Eclipse 外掛可以自動為你下載原始碼。為了在實踐中看到這一點,讓我們看一下 JdbcTemplate 的程式碼。在 STS 中,轉到 Navigate > Open Type。輸入 JdbcTemplate,然後按 Enter。STS 最初會開啟 .class 檔案(預設行為),然後嘗試在後臺下載原始碼。幾秒鐘後,你應該就能看到 JdbcTemplate 的正確原始碼了。然後,你可以檢查程式碼並設定斷點,你可以在偵錯程式中逐步執行這些斷點。方便吧?

讓 Spring Roo 來處理

我們已經看到 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。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有