【问题标题】:Choosing specific Environment to build using Apache ANT选择使用 Apache ANT 构建的特定环境
【发布时间】:2014-02-14 20:36:42
【问题描述】:

这似乎是一个微不足道的问题,但我已经用 Google 搜索了大约 1 小时,但没有找到直接解决这个问题的答案,所以这里是:

堆栈:

  • Java
  • Tomcat7
  • MySQL
  • OpenDS

开发环境 IntelliJ IDEA(个人) - 我们的一些开发人员更喜欢 Eclipse

我有一个 Java/Spring 项目,我们部署到多个环境中,我正在尝试创建一个构建过程供我们开发人员使用,这将允许我们从我们的工作站创建一个可部署的 WAR 文件。例如,我希望能够构建一个 WAR,然后我可以通过 ANT 或手动部署到 Servlet 容器:

  1. 沙盒 - 将在具有本地 Tomcat 等的给定工作站上运行的构建。
  2. DEV - 从我的工作站构建一个 WAR,该 WAR 可以发送到另一个团队以部署在托管的 DEV 服务器上
  3. QA - 与 DEV 相同,但替换变量存在明显差异,例如引用的其他服务器名称、作为加密字符串传递的密码等。
  4. PROD - 与 QA 相同...

我希望能够做的是,无论是从命令行还是通过 IntelliJ,指定我想要为哪个环境打包 WAR 文件并运行它。然后拿起 WAR,做我需要做的事情。

再次,我知道这听起来微不足道,我缺少一些关于 ANT 的非常基本的东西,但非常感谢您提供的任何帮助。

【问题讨论】:

  • 很高兴有帮助 :) 如果您发现我的回答很有用,请考虑将其标记为“已接受”。如果您有任何疑问或需要详细说明,请随时发布。再次,很高兴有帮助:)
  • 对您的问题:“我希望能够做的是,无论是从命令行还是通过 IntelliJ,指定我想要为哪个环境打包 WAR 文件,然后运行它。然后拿起战争,做我需要做的事情。” - 在您的 ant 目标中构建智能,以使用读取或评估属性的功能,例如 ant -f build.xml -Denv.value=[DEV,PROD,...] -propertyfile=<setup-your-env-specific-props>.xml
  • 再次,非常感谢您将我的回答标记为已接受 :) 很高兴能帮上忙 :) 祝你好运。

标签: java ant intellij-idea automated-deploy


【解决方案1】:

这是一个带有 2 个目标的骨架蚂蚁构建。初始化简单的回显到控制台你的类路径(用于调试)。 “make-war”任务构建实际的战争档案。您需要更改位置以匹配您的设置。

<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 元素作为参考。您可以随时将它们注释掉。 希望有帮助:)

更新: 我添加到命令行变量。您将上述内容保存在名为 build.xml 的文件中。您可以使用以下命令行运行该文件:

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

这会将您的构建类型设置为“PROD”并将版本设置为“2.01”。这演示了如何在 ANT BUILD FILE 中使用命令行参数(根据您的详细说明)。

对于要合并命令行处理和“战争”目标的人,他们需要访问您的特定构建文件、构建要求、环境等。虽然“生产”一词确实很常见。 “PRODUCTION”的含义因项目而异,等等。因此,所有人所能做的就是向您展示如何创建一个接受参数的 ANT 脚本。

希望对您有所帮助。

【讨论】:

  • 抱歉耽搁了。澄清一下,我希望整个构建过程只需将一个或两个参数传递给 ANT 即可针对特定的目标环境运行。因此,如果我想从我的工作站制作和打包一个用于生产的构建,并且构建过程会在我的属性文件中进行所有适当的变量替换,等等,我可以做到这一点。知道生成的 WAR 适合我们的生产环境。这个过程也应该编译类。可以合理地预期并不是每个人都在 Eclipse 或 IntelliJ 中启用了自动构建。
  • 感谢您的回复。我更新了我的答案。听起来您希望由 Eclipse 或 IntelliJ 生成的构建文件的副本从字面上发布修改后的脚本。我没有您的构建脚本或您的要求的副本。我只能向您展示如何执行所要求的任务:1)如何与 ant 对 web 应用程序进行“战争”。 1) 如何在 ant 中使用命令行参数。我回答了这两个问题 :) 请将我的答案标记为已接受 :)
  • 对不起!!上面评论中的错字。我的意思是:听起来您希望有人能够访问由 Eclipse 或 IntelliJ 生成的构建脚本并进行适当的修改。 --- 这可能有点太多了 :) 请考虑缩减您的期望 :) 也许我错了 :)
猜你喜欢
  • 2011-03-24
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2020-10-07
  • 2019-08-29
  • 2019-08-09
相关资源
最近更新 更多