我最近分配了一项任务,让ant能够为不同的环境构建war包。除了一个功能,我差不多完成了。
ant接受类似env
的{{1}}参数,并使用不同的配置文件来生成war包。但是默认目标是-Denv=DEV
,它将构建,部署和启动tomcat。我传递start
arg时,我不希望ant部署战争,也不启动服务器。我只想要ant来构建ROOT.war。这就够了。
我知道我可以再输入一个字来实现这个目标,但你知道我们都很懒。 :d
有没有人知道如何根据命令行参数更改默认目标? 我的要求如下:
-Denv=PROD
将构建,部署和启动服务器ant -Denv=DEV
只会构建ROOT.war 答案 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