【问题标题】:Change default ant target by command line argument通过命令行参数更改默认蚂蚁目标
【发布时间】:2011-03-06 03:40:53
【问题描述】:

我最近被分配了一项任务,让 ant 能够为不同的环境构建战争包。除了一项功能外,我几乎完成了。

ant通过like-Denv=DEV接受env参数,并使用不同的配置文件制作war包。但默认目标是start,它将构建、部署和启动 tomcat。当我传入-Denv=PROD arg 时,我不想让ant 部署战争也不启动服务器。我只希望 ant 构建 ROOT.war。够了。

我知道我可以再输入一个词来实现这个目标,但你知道我们都很懒惰。 :D

有谁知道如何根据命令行参数更改默认目标? 我的要求如下:

  1. ant -Denv=DEV 将构建、部署和启动服务器
  2. ant -Denv=PROD 只会构建 ROOT.war

【问题讨论】:

    标签: java ant build-process build build-automation


    【解决方案1】:

    我建议您在名为“DEV”和“PROD”的 build.xml 文件中定义目标,然后调用 Ant:

    ant DEV
    

    ant PROD
    

    如果您想坚持当前使用系统属性选择目标的方法,那么@krock 的答案似乎是可行的方法。 (但我认为这种方法没有任何优势。)

    【讨论】:

    • 其实我之前的版本就是这么干的。但是我的 TL 说我们以后可能会有更多的 ENV,比如 QA 和测试。所以,我们最好不要在 build.xml 中定义它们。
    • 嗯......好吧,我不知道(只是)使用系统属性会如何做你想要的。如果您希望能够为 build.xml 文件不知道的“环境”构建,您需要使用 <import> 或类似的东西做一些时髦的事情。
    • 另外 - 请注意,这不仅仅是“更改默认目标”。您实际上想定义与主要build.xml分开的默认目标。
    • 对。也许一个 build.xml 是不够的。
    【解决方案2】:

    您还可以根据 env 属性加载不同的属性文件:

    <property file="${env}.properties"/>
    

    并在那里配置要调用的目标:

    在 DEV.properties 中:

    default.target=dev.build
    

    在 PROD.properties 中:

    default.target=prod.build
    

    然后根据属性调用目标:

    <target name="default">
        <antcall target="${default.target}"/>
    </target>
    
    <target name="dev.build">
        ....
    </target>
    
    <target name="prod.build">
        ....
    </target>
    

    通过为每种构建类型指定单独的属性文件,您可以轻松配置构建的其他方面。

    【讨论】:

    • 虽然 Stephen C 建议您的解决方案作为替代方案,但我认为这与他的解决方案相似。我仍然需要为这些 ENV 定义不同的目标。
    【解决方案3】:

    在 ant-contrib 集合中有一个“if”-Task。使用这个你可以 定义一个默认任务,测试您的参数并调用所需的任务。 如果未设置 dev 参数,您还可以定义默认行为。

    【讨论】:

      【解决方案4】:

      好吧,我放弃了。

      使用 Ruby/Rails 或其他现代工具后,我发现 ant 很难用。

      你不需要学习如何在Ant中运行native命令,只需要写一个bash脚本来运行ant和混合命令行,比如:

      # my_run.sh
      
      ant package  # assume you have this target in build.xml
      cp target.war /opt/tomcat/webapps   # copy this file to tomcat
      /opt/tomcat/bin/shutdown.sh   # restart tomcat 
      /opt/tomcat/bin/startup.sh
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        相关资源
        最近更新 更多