2013-07-19 21 views
0

在我的android項目中,我使用MAVEN進行分期和生產構建。這兩者之間的唯一區別是我使用不同的URL來消費其餘的服務。所以我正在尋找一種可以使用MAVEN進行構建的方法。我正在考慮將我的代碼的其餘URL部分移動到單獨的java jar中,並將此jar聲明爲我的項目中的依賴項。使用MAVEN進行分期和生產構建

所以我會有兩個罐子。一個將我的應用程序指向生產,一個將我的應用程序指向登臺URL。現在我需要只包括其中的一個基於參數當我說的東西像mvn clean install -staging or mvn clean isntall -production

我怎麼能實現這一點。任何幫助,將不勝感激。

+0

專用statging應用看一看[如何從一個項目創建兩個JAR(...爲什麼你不應該)(HTTP://blog.sonatype .COM /人/ 2010/01 /如何做創建,二,罐子 - 從一項目 - 和爲什麼 - 您 - 不應該/)。 – FrVaBe

+0

我在找什麼可以讓我在項目中包含兩種可能的依賴項之一?因此,如果這是一個分段構建,那麼如果其生成構建包含此依賴關係,則可以包含此依賴關係。 – user1730789

+0

如果你遵循這種方法,你會將工件部署到你的倉庫,在那裏你不能區分它是爲了分期還是生產而構建。恕我直言,你應該建立兩個不同的工件(也許在groupId中的分段/生產標識符)。 – FrVaBe

回答

1

看看Maven Profiles。配置文件在活動時會修改您的pom的特定區域 - 例如,您可以通過修改<dependencies>元素來包含或排除依賴關係。您可以指定在構建時很容易像這樣在命令行中使用的配置文件:

mvn package -Pstaging 

因此,舉例來說,如果你想使用你能有的配置文件添加到您的POM這樣的:

<project> 
    ... 
    <profiles> 

    <profile> 
     <name>staging</name> 
     <properties> 
     <rest.url>http://staging.rest/url</rest.url> 
     </properties> 
    </profile> 

    <profile> 
     <name>production</name> 
     <properties> 
     <rest.url>http://production.rest/url</rest.url> 
     </properties> 
    </profile> 

    <profiles> 
</project> 

然後,當你準備好了,您可以使用相應的配置文件運行構建:

mvn clean install -Pstaging 

Maven的財產將被配置文件進行設置。您可以在您的pom的其他地方使用此屬性,例如,您可以過濾屬性文件以包含rest.url值,並讓您的應用程序在運行時讀取它。看看Maven Resources Plugin,它允許你定義應用程序將使用的資源,並根據你的pom中的屬性對它們進行過濾。

+0

你能告訴我一個例子,或者指給我一個使用它的pom。 – user1730789

+0

我已經用一個例子更新了答案。 – Conan

+0

據我瞭解@ user1730789想「包裝」不同的依賴到他的應用程序當然是可能的配置文件,但恕我直言,不建議。一旦將應用程序部署到存儲庫中,除非您真正將其解包並向裏看,否則將無法查看內部的內容。所以更好地爲每個環境構建專用工件/應用程序。 – FrVaBe

1

我不會推薦使用配置文件來更改構建工件的內容。一旦您的工件被構建並部署到您的存儲庫中,您就無法區分它是否適合您的暫存或生產環境(除非您在工件內部尋找)。

因此,作爲一個簡單的解決方案,我會做第二pom.xml分期(如pom-staging.xml),並給予專門的Maven座標一樣神器,

<groupId>foo.bar.staging</groupId> 
<artifactId>my-app</artifactId> 

可以不是改變一切,這是該登臺環境不同這個POM(如依賴),並建立與

mvn -f pom-staging.xml install 
+0

這是一個很好的觀點,對您而言,最好在每個環境中都有一個屬性文件,該文件爲您指定了環境特定的配置。 – Conan

+0

@Conan這可能是最好的解決方案,但在這裏處理Android項目,我認爲你不能爲每部手機提供屬性文件。您可以通過應用程序設置來配置URL,但我認爲在正常情況下,這應該隱藏給用戶。 – FrVaBe

+0

是的,+1不向用戶公開這種配置。在這種情況下,當組裝針對目標環境的部署工件時,希望發生資源過濾,例如,一個應用商店。你很想知道你不希望在你的maven倉庫中使用這種配置 - 儘管你可以在倉庫中放置一些令牌並在出口過濾它們,這很好。 – Conan