2014-02-14 150 views
0

這似乎是一個簡單的問題,但我用Google搜索了約1小時,未發現直接解決它的答案打造,所以這裏有雲:選擇特定環境使用Apache Ant

堆棧:

  • 的Java
  • Tomcat7
  • MySQL的
  • OpenDS的

開發環境 的IntelliJ IDEA(個人) - 我們的一些開發人員喜歡的Eclipse

我有我們部署到多個環境中的Java/Spring項目,我試圖創建一個構建過程對於我們開發者使用將允許我們從我們的工作站創建可部署的WAR文件。 。例如,我希望能夠建立一個WAR,我可以的話,無論是通過ANT或手動部署爲Servlet容器:

  1. 沙盒 - 將與本地的Tomcat給定工作站上運行構建等
  2. DEV - 在我的工作站上,構建一個WAR,可以發送給其他團隊以在受管理的DEV服務器上進行部署
  3. QA - 與DEV相似,替換變量與引用的其他服務器名稱有明顯區別,密碼作爲加密字符串傳遞,等等。
  4. PROD - 與QA相同...

我希望能夠做的是,無論是從命令行還是通過IntelliJ,指定我想打包一個WAR文件的環境,並運行它。然後採取戰爭,並做我需要做的。

同樣,我知道這聽起來微不足道,並且有一些關於ANT的元素,我很想念,但是您可以提供的任何幫助非常感謝。

+0

很高興幫助:)如果您發現我的答案是有用的,請考慮將其標記爲「已接受」。如果您有疑問或需要詳細說明,請隨時發佈。再次,很高興有幫助:) – lorinpa

+2

對你的問題:「我希望能夠做的是,無論是從命令行還是通過IntelliJ,指定我想打包一個WAR文件的環境,並運行它。然後採取戰爭,並做我需要做的。「 - 在您的螞蟻目標中構建智能,以便使用像'ant -f build.xml -Denv.value = [DEV,PROD,...] -propertyfile = .xml' – 2014-02-17 14:29:43

+0

再次,非常感謝您將我的答案標記爲已接受:)很高興有幫助:)祝您好運。 – lorinpa

回答

0

這裏是一個有2個目標的骨架螞蟻構建。初始化簡單的回聲到控制檯你的類路徑(用於調試)。 「打仗」任務構建實際的戰爭檔案。您需要更改位置以符合您的設置。

<project name="Sample Build Script" default="init" basedir="."> 

      <property environment="env" /> 
      <!-- ***** COMMAND LINE ARGUMENTS DEMOED HERE --> 
      <property name="build_type" value= "${env.build_type}"/> 
    <property name="version" value="${env.version}"/> 
      <!-- ***** END OF COMMAND LINE ARG **** -->     

      <property name="src.dir" value="${basedir}/source"/> 
      <property name="build.classes.dir" value="${basedir}/classes"/> 
      <property name="project.name" value="myproject"/> 

       <target name="make-war" depends="compile-servlet"> 
        <delete file="${build.classes.dir}/war/${project.name}.war"/>  
        <war destfile="${build.classes.dir}/war/${project.name}.war" webxml="${src.dir}/WEB-INF/web.xml">  
        <webinf dir="${src.dir}/WEB-INF" />  

        <fileset dir="${src.dir}/html">  
        <include name="*.html" /> 
        </fileset> 

        <classes dir="${build.classes.dir}">  
        <include name="/my/package/*.*"/> 
        </classes> 

        <lib dir="/some/lib/loc"> 
        <include name="some-lib.jar"/> 
         </lib> 
       </war>  
      </target> 

      <target name="init" > 
       <echo message="Using Source directory=${src.dir}" /> 
       <echo message="Using Build-Classes directory=${build.classes.dir}" /> 
       <!-- **** VERIFY COMMAND LINE ARGS HERE ***** --> 
       <echo message="Build Type=${build_type}" /> 
       <echo message="Build Version =${version}" /> 
       <!-- *** END VERIFY COMMAND LINE ARGUMENTS --> 
      </target> 
     </project> 

我假設你已經編譯過你的類。你只是想生成戰爭檔案。我包含了html和lib元素作爲參考。你總是可以評論他們。 希望可以幫到:)

更新: 我加入了COMMAND LINE VARIABLES。您將上述內容保存在名爲build.xml的文件中。使用以下命令行運行該文件:

$> ant -Denv.build_type=PROD -Denv.version=2.01 

將您的構建類型設置爲「PROD」並將版本設置爲「2.01」。這說明了如何在ANT BUILD FILE中使用命令行參數(根據您的具體情況)。

對於需要整合,命令行處理和「戰爭」目標的人來說,他們需要訪問特定的構建文件,構建需求,環境等。雖然「製作」一詞的確是常見的。 「生產」的含義因項目而異等。因此,所有人都可以做的就是告訴你如何創建一個接受參數的ANT腳本。

希望有所幫助。

+0

對不起,延遲。爲了澄清,我想整個構建過程運行一個特定的目標環境,只需傳遞一個或兩個參數給ANT。因此,如果在我的工作站上,我想爲生產製作並打包構建,並且構建過程在我的屬性文件中製作所有適當的變量替換等等,我可以做到這一點。知道由此產生的WAR適合我們的生產環境。這個過程也應該編譯類。希望不是所有人都在Eclipse或IntelliJ中打開自動構建是合理的。 –

+1

謝謝你的迴應。我更新了我的答案。這聽起來像是你想要由Eclipse或IntelliJ生成的構建文件的副本從字面上發佈修改後的腳本。我沒有您的構建腳本或您的要求的副本。我只能告訴你如何執行所要求的任務:1)如何用螞蟻「打」一個web應用程序。 1)如何在ant中使用命令行參數。我回答了兩個問題:)請將我的答案標記爲已接受:) – lorinpa

+0

對不起!在上面的評論中錯字。我的意思是說:這聽起來像你想讓別人訪問由Eclipse或IntelliJ生成的構建腳本並進行適當的修改。 ---這可能有點太多:)請考慮縮減你的期望:)也許我錯了:) – lorinpa