Spring Android and Maven (Part 2)

工程 | Roy Clarkson | 2011年2月9日 | ...

《Spring Android and Maven (Part 1)》中,我介紹瞭如何使用Maven從命令列構建Android應用程式。在這篇文章中,我將向您展示如何從Eclipse IDE使用Maven依賴管理來構建Android應用程式。該應用程式還將展示本週釋出的Spring Android 1.0.0.M2中的最新功能。

概述

Maven Android Plugin允許您使用Maven構建Android應用程式並從中受益於依賴管理。Google的Android Development Tools (ADT) 外掛允許您在Eclipse IDE中開發和構建Android應用程式。要在Eclipse中實現Maven依賴管理,需要Maven Integration for Android Development Tools外掛,該外掛集成了m2eclipse、ADT外掛和Maven Android Plugin。這篇文章將向您展示如何安裝此外掛,並使用它在Eclipse IDE中實現基於Maven的依賴管理。

本文使用的每個元件的具體版本如下所列

配置Eclipse

在構建或編譯任何程式碼之前,我們需要安裝和配置所需的Eclipse外掛。在Part 1中,我討論了安裝Android SDK,所以假設您已經完成了。但是,如果您還沒有安裝,則需要繼續安裝。此外,您還需要已經安裝了Eclipse 3.5或更高版本。在本例中,我使用的是基於Eclipse 3.6.1的SpringSource Tool Suite 2.5.2。

需要安裝三個Eclipse外掛:ADT Plugin for Eclipse、Maven Integration for Eclipse以及Maven Integration for Android Development Tools。您有兩種選擇來安裝這些外掛:要麼使用Eclipse Marketplace Client,要麼手動安裝每個外掛。

使用Eclipse Marketplace Client安裝外掛

根據您的Eclipse版本,您可能已經安裝了Eclipse Marketplace Client。Marketplace Client將簡化外掛的安裝,因為它將傳遞性地包含任何必需的外掛。

  1. 透過選擇Help -> Eclipse Marketplace...開啟Eclipse Marketplace Client
  2. Find:欄位中輸入m2eclipse-android,然後單擊Go按鈕。
  3. 單擊Maven Integration for Android Development Tools旁邊的Install按鈕。
    eclipse-marketplace-search
  4. 單擊Next按鈕確認選定的功能。請注意,Android Development Tools和Maven Integration for Eclipse是依賴項。
    eclipse-marketplace-confirm
  5. 接受許可協議,然後單擊Finish按鈕完成安裝。
  6. 重啟Eclipse後,您需要設定Android SDK Location,如下一節ADT外掛安裝中所述。

手動安裝外掛

除了使用Marketplace Client之外,還可以手動安裝每個外掛。如果您從Marketplace安裝了外掛,則可以跳到“示例Android應用程式”部分。對於每個外掛,在Eclipse的Help選單中,選擇Install New Software...,然後單擊Add...按鈕。

Eclipse Install New Software

ADT Plugin for Eclipse

第一步是安裝ADT(Android Developer Tools)外掛。這是Google提供的官方外掛,用於開發Android應用程式。如果您已經安裝了ADT外掛,請透過從Eclipse的Help選單執行Check for Updates來驗證您是否具有最新版本。

  1. Name輸入ADT Plugin,為Location輸入以下URL。單擊OK繼續。
    ```sourcecode https://dl-ssl.google.com/android/eclipse ```
  2. 在Available Software對話方塊中,選擇Developer Tools旁邊的複選框,然後單擊Next。
    adt-plugin-available-software
  3. 在下一個視窗中,您將看到要下載的工具列表。單擊Next
  4. 閱讀並接受許可協議,然後單擊Finish
  5. 安裝完成後,重新啟動Eclipse。
  6. Eclipse重啟後,透過選擇Eclipse選單中的Preferences並選擇左列中的Android來設定Android SDK Location。在我的機器上,SDK資料夾位於我的配置檔案資料夾中。配置好位置後,您應該會看到SDK Targets的列表。
    eclipse-android-sdk-location
  7. 注意:如果您在ADT安裝過程中遇到任何問題,Android網站可以提供更多資訊。

    Maven Integration for Eclipse

    下一步是安裝m2eclipse外掛。STS 2.5.2附帶此外掛。但是,如果您使用的是早期版本,或者已經安裝了該外掛,則需要驗證您是否擁有最新版本。Maven Integration for Android Development Tools需要0.12.0或更高版本。

    1. Name輸入m2eclipse Core Update Site,為Location輸入以下URL。單擊OK繼續。
      ```sourcecode http://m2eclipse.sonatype.org/sites/m2e ```
    2. 在Available Software對話方塊中,選擇Maven Integration for Eclipse旁邊的複選框,然後單擊Next
      m2eclipse-plugin-available-software
    3. 在下一個視窗中,您將看到要下載的元件列表。單擊Next
    4. 閱讀並同意Eclipse Public License v1.0的條款,然後單擊Finish
    5. 安裝完成後,重新啟動Eclipse。
    6. Maven Integration for Android Development Tools

      我們還需要安裝一個外掛,這個外掛將所有這些功能整合在一起。設定好Android SDK並在Eclipse中配置好ADT外掛後,安裝Maven Integration for Android Development Tools外掛。

      1. 從Eclipse的Help選單中,選擇Install New Software...,然後單擊Add...按鈕。
      2. Name輸入Maven Integration for Android Development Tools Update Site,為Location輸入以下URL。單擊OK繼續。
        ```sourcecode https://svn.codespot.com/a/eclipselabs.org/m2eclipse-android-integration/updates/m2eclipse-android-integration/ ```
      3. 在Available Software對話方塊中,選擇Maven Integration for Android Development Tools旁邊的複選框,然後單擊Next
        m2eclipse-android-plugin-available-software
      4. 在下一個視窗中,您將看到要下載的元件列表。單擊Next
      5. 閱讀並接受許可協議,然後單擊Finish
      6. 安裝完成後,重新啟動Eclipse。

      示例Android應用程式

      現在我們已經安裝並配置了所有必需的外掛,可以開始使用示例Android應用程式來測試我們的設定了。我們將使用為Part 1部落格文章建立的示例應用程式,但該示例應用程式已更新為執行在最新的Android平臺SDK 2.3.1 API Level 9上。如果您沒有安裝此SDK平臺,則需要在構建示例程式碼之前進行安裝。

      獲取示例專案

      執行以下命令來克隆Spring Mobile samples儲存庫。

      $ git clone git://git.springsource.org/spring-mobile/samples.git spring-mobile-samples
      

      如果git://URL不可訪問,您可能需要嘗試samples儲存庫的備用URL。

      $ git clone http://http.git.springsource.org/spring-mobile/samples.git spring-mobile-samples
      

      在Eclipse中開啟原始碼之前,請導航到spring-android-showcase/client專案目錄,並驗證專案是否可以使用Android Maven Plugin成功構建。

      $ mvn clean install
      

      在Eclipse中開啟專案

      假設專案已成功從命令列構建,我們就可以在Eclipse中開啟該專案了。

      1. 從Eclipse的File選單中,選擇NewProject...
      2. Android資料夾中選擇Android Project嚮導,然後單擊Next。如果Android嚮導不可用,則表示ADT外掛尚未安裝。
        eclipse-new-android-project
      3. New Android Project視窗中,為Project name輸入spring-android-showcase-client。選擇Create project from existing source,然後瀏覽到示例客戶端的Location。單擊Finish將專案新增到Eclipse。
        eclipse-new-android-project-settings

      啟用Maven依賴管理

      示例專案現在已載入到Eclipse中。您首先會注意到Package Explorer中專案上的一個大紅色“X”,這表示它目前無法構建。由於我們尚未為該專案配置Maven,因此這是預期的行為。

      eclipse-package-explorer-errors

      要啟用Maven依賴管理,請右鍵單擊Package Explorer中的spring-android-showcase-client,然後從上下文選單中選擇Maven -> Enable Dependency Management

      eclipse-enable-dependency-management

      示例專案已包含以下Maven POM檔案。如果您的專案中沒有現有的POM,Eclipse會提示您建立一個。請注意在build部分中使用了maven-android-pluginmaven-compiler plugin

      
      <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/xsd/maven-4.0.0.xsd">
      	<modelVersion>4.0.0</modelVersion>
      	
      	<groupId>org.springframework.android</groupId>
      	<artifactId>spring-android-showcase-client</artifactId>
      	<version>1.0.0.BUILD-SNAPSHOT</version>
      	<packaging>apk</packaging>
      	<name>spring-android-showcase-client</name>
      	<url>http://www.springsource.org</url> 
      	<organization>
      		<name>SpringSource</name>
      		<url>http://www.springsource.org</url>
      	</organization>
      
      	<properties> 
      		<android-platform>9</android-platform>
      		<android-emulator>9</android-emulator>
      		<maven-android-plugin-version>2.8.4</maven-android-plugin-version>
      		<maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
      		<android-version>2.3.1</android-version>
      		<spring-android-version>1.0.0.M2</spring-android-version>
      		<jackson-version>1.7.2</jackson-version>
      		<simple-version>2.4.1</simple-version>
      		<android-rome-version>1.0.0-r2</android-rome-version>
      	</properties>
      
      	<build>
      		<sourceDirectory>src</sourceDirectory>
      		<finalName>${project.artifactId}</finalName>
      		<plugins>
      			<plugin>
      				<groupId>com.jayway.maven.plugins.android.generation2</groupId>
      				<artifactId>maven-android-plugin</artifactId>
      				<version>${maven-android-plugin-version}</version>
      				<configuration>
      					<sdk>
      						<platform>${android-platform}</platform>
      					</sdk>
      					<emulator>
      						<avd>${android-emulator}</avd>
      					</emulator>
      					<deleteConflictingFiles>true</deleteConflictingFiles>
      					<undeployBeforeDeploy>true</undeployBeforeDeploy>
      				</configuration>
      				<extensions>true</extensions>
      			</plugin>
      			<plugin>
      				<artifactId>maven-compiler-plugin</artifactId>
      				<version>${maven-compiler-plugin-version}</version>
      			</plugin>
      		</plugins>
      	</build>
      
      	<dependencies>
      		<dependency>
      			<groupId>com.google.android</groupId>
      			<artifactId>android</artifactId>
      			<version>${android-version}</version>
      			<scope>provided</scope>
      		</dependency>
      		<dependency>
      			<groupId>org.springframework.android</groupId>
      			<artifactId>spring-android-rest-template</artifactId>
      			<version>${spring-android-version}</version>
      		</dependency>
      		<dependency>
      			<!-- Using Jackson for JSON marshaling -->
      			<groupId>org.codehaus.jackson</groupId>
      			<artifactId>jackson-mapper-asl</artifactId>
      			<version>${jackson-version}</version>
      		</dependency>
      		<dependency>
      			<!-- Using Simple for XML marshaling -->
      			<groupId>org.simpleframework</groupId>
      			<artifactId>simple-xml</artifactId>
      			<version>${simple-version}</version>
      			<exclusions>
      				<exclusion>
      					<artifactId>stax</artifactId>
      					<groupId>stax</groupId>
      				</exclusion>
      				<exclusion>
      					<artifactId>stax-api</artifactId>
      					<groupId>stax</groupId>
      				</exclusion>
      			</exclusions>
      		</dependency>
      		<dependency>
      			<!-- Using ROME for RSS and ATOM feeds -->
      			<groupId>com.google.code.android-rome-feed-reader</groupId>
      			<artifactId>android-rome-feed-reader</artifactId>
      			<version>${android-rome-version}</version>
      		</dependency>
      	</dependencies>
      
      	<repositories>
      		<!-- For developing with Android ROME Feed Reader -->
      		<repository>
      			<id>android-rome-feed-reader-repository</id>
      			<name>Android ROME Feed Reader Repository</name>
      			<url>https://android-rome-feed-reader.googlecode.com/svn/maven2/releases</url>
      		</repository>
      		<!-- For testing against latest Spring snapshots -->
      		<repository>
      			<id>org.springframework.maven.snapshot</id>
      			<name>Spring Maven Snapshot Repository</name>
      			<url>http://maven.springframework.org/snapshot</url>
      			<releases><enabled>false</enabled></releases>
      			<snapshots><enabled>true</enabled></snapshots>
      		</repository>
      		<!-- For developing against latest Spring milestones -->
      		<repository>
      			<id>org.springframework.maven.milestone</id>
      			<name>Spring Maven Milestone Repository</name>
      			<url>http://maven.springframework.org/milestone</url>
      			<snapshots><enabled>false</enabled></snapshots>
      		</repository>
      	</repositories>
      	
      </project>
      

      Maven現在將更新所需的依賴項,Eclipse應該可以成功構建專案。一旦Eclipse完成專案構建,您現在應該會在Package Explorer視窗中看到Maven Dependencies類路徑容器。

      eclipse-package-explorer-maven-enabled

      有幾點需要注意。首先,您可能會看到專案中有一個bin資料夾。您可以從Java Build Path屬性(如下所示)中看到預設的輸出資料夾是Target資料夾。因此,可以安全地刪除bin資料夾。

      eclipse-java-build-path-sources

      其次,您可能還會注意到專案中添加了一個JRE System Library類路徑容器。由於我們正在構建一個利用Android JVM的Android應用程式,因此您應該不需要引用JRE。如果您在Eclipse中使用ADT建立了新的Android應用程式,您會知道它不會為JRE新增類路徑容器。我已經與Maven Integration for Android Development Tools的開發人員Ricardo Gladwell討論過此事,他建立了一個ticket來研究這個問題。我已經從示例專案中刪除了JRE,沒有明顯的負面影響。但您可能需要關注該問題以獲取更多資訊。

      啟動Spring Android Showcase示例應用程式

      要執行示例應用程式,只需在Package Explorer中選擇spring-android-showcase-client,然後單擊Run按鈕。示例客戶端中的Maven POM檔案配置為查詢名為“9”的Android Virtual Device (AVD)。如前所述,samples專案已更新為執行在Android Platform SDK 2.3.1上。您需要為此平臺配置一個AVD才能執行samples。

      eclipse-run

      第一次執行應用程式時,您應該會在Eclipse控制檯中看到類似以下的內容

      [2011-02-08 14:00:49 - spring-android-showcase-client] ------------------------------
      [2011-02-08 14:00:49 - spring-android-showcase-client] Android Launch!
      [2011-02-08 14:00:49 - spring-android-showcase-client] adb is running normally.
      [2011-02-08 14:00:49 - spring-android-showcase-client] Performing org.springframework.android.showcase.MainActivity activity launch
      [2011-02-08 14:00:49 - spring-android-showcase-client] Automatic Target Mode: launching new emulator with compatible AVD '9'
      [2011-02-08 14:00:49 - spring-android-showcase-client] Launching a new emulator with Virtual Device '9'
      [2011-02-08 14:00:50 - Emulator] 2011-02-08 14:00:50.936 emulator[5951:903] Warning once: This application, or a library it uses, is using NSQuickDrawView, which has been deprecated. Apps should cease use of QuickDraw and move to Quartz.
      [2011-02-08 14:00:50 - spring-android-showcase-client] New emulator found: emulator-5554
      [2011-02-08 14:00:50 - spring-android-showcase-client] Waiting for HOME ('android.process.acore') to be launched...
      [2011-02-08 14:01:21 - spring-android-showcase-client] HOME is up on device 'emulator-5554'
      [2011-02-08 14:01:21 - spring-android-showcase-client] Uploading spring-android-showcase-client.apk onto device 'emulator-5554'
      [2011-02-08 14:01:23 - spring-android-showcase-client] Installing spring-android-showcase-client.apk...
      [2011-02-08 14:01:50 - spring-android-showcase-client] Success!
      [2011-02-08 14:01:50 - spring-android-showcase-client] Starting activity org.springframework.android.showcase.MainActivity on device emulator-5554
      [2011-02-08 14:01:52 - spring-android-showcase-client] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=org.springframework.android.showcase/.MainActivity }
      

      AVD將啟動並顯示鎖定螢幕。將綠色鎖從左向右滑動以“開啟”Android裝置。開啟後,應用程式現在應該顯示

      avd-showcase-home

      結論

      在這篇文章中,我們回顧瞭如何在Eclipse中構建一個使用Maven依賴管理的示例Android應用程式。為了實現這一點,我們使用了Eclipse、Android Development Tools (ADT) Plugin for Eclipse、Maven Android Plugin、Maven Integration for Android Development Tools外掛以及Maven Integration for Eclipse (m2eclipse)外掛。其中涉及許多元件,但一旦所有設定都配置好,就可以輕鬆地構建和部署到Android模擬器。如果您在Android應用程式中使用第三方庫,則應考慮使用這些工具來幫助管理這些依賴項。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

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

瞭解更多

獲得支援

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

瞭解更多

即將舉行的活動

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

檢視所有