2014-02-14 104 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