通过命令行参数更改默认的ant目标

时间:2010-06-21 04:04:23

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

我最近分配了一项任务,让ant能够为不同的环境构建war包。除了一个功能,我差不多完成了。

ant接受类似env的{​​{1}}参数,并使用不同的配置文件来生成war包。但是默认目标是-Denv=DEV,它将构建,部署和启动tomcat。我传递start arg时,我不希望ant部署战争,也不启动服务器。我只想要ant来构建ROOT.war。这就够了。

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

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

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

4 个答案:

答案 0 :(得分:4)

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

ant DEV

ant PROD

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

答案 1 :(得分: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>

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

好吧,我放弃了。

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

无需学习如何在 Ant 中运行原生命令,只需编写一个 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