Java 通过命令行参数更改默认ant目标
我最近被分配了一项任务,使ant能够为不同的环境构建war包。除了一个功能外,我几乎完成了 ant通过likeJava 通过命令行参数更改默认ant目标,java,ant,build-process,build,build-automation,Java,Ant,Build Process,Build,Build Automation,我最近被分配了一项任务,使ant能够为不同的环境构建war包。除了一个功能外,我几乎完成了 ant通过like-Denv=DEV接受一个env参数,并使用不同的配置文件来生成war包。但是默认目标是start,它将构建、部署和启动tomcat。我不希望ant部署war,也不希望在传入-Denv=PRODarg时启动服务器。我只想让蚂蚁建立根。战争。够了 我知道我可以再打一个字来实现这个目标,但你知道我们都很懒D 有人知道如何根据命令行参数更改默认目标吗? 我的要求如下: ant-Denv=DEV
-Denv=DEV
接受一个env
参数,并使用不同的配置文件来生成war包。但是默认目标是start
,它将构建、部署和启动tomcat。我不希望ant部署war,也不希望在传入-Denv=PROD
arg时启动服务器。我只想让蚂蚁建立根。战争。够了
我知道我可以再打一个字来实现这个目标,但你知道我们都很懒D
有人知道如何根据命令行参数更改默认目标吗?
我的要求如下:
ant-Denv=DEV
将构建、部署和启动服务器ant-Denv=PROD
将只构建ROOT.war您还可以基于env属性加载不同的属性文件:
<property file="${env}.properties"/>
<target name="default">
<antcall target="${default.target}"/>
</target>
<target name="dev.build">
....
</target>
<target name="prod.build">
....
</target>
在PROD.properties中:
default.target=dev.build
default.target=prod.build
然后根据属性调用目标:
<property file="${env}.properties"/>
<target name="default">
<antcall target="${default.target}"/>
</target>
<target name="dev.build">
....
</target>
<target name="prod.build">
....
</target>
....
....
通过为每种构建类型指定单独的属性文件,您可以轻松配置构建的其他方面。我建议您在
build.xml
文件中定义名为“DEV”和“PROD”的目标,然后调用Ant,如下所示:
ant DEV
或
如果您想坚持当前使用系统属性选择目标的方法,那么@krock的答案似乎是可行的。(但我不认为这种方法有什么好处。)ant contrib集合中有一个“if”-任务。用这个你可以
定义一个默认任务,用于测试参数并调用所需的任务。
如果未设置dev参数,还可以定义默认行为 好吧,我放弃
在使用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
事实上,这就是我在上一个版本中所做的。但是我的TL说我们以后可能会有更多的环境,比如QA和测试。因此,我们最好不要在build.xml.Hmmm中定义它们。。。我不知道(仅仅)使用一个系统属性如何满足您的需求。如果您希望能够为
build.xml
文件未知的“env”进行构建,则需要使用
或类似的工具进行一些有趣的操作。另外,请注意,这不仅仅是“更改默认目标”。实际上,您希望将默认目标与主build.xml
分开定义。也许一个build.xml是不够的。虽然Stephen C建议您的解决方案作为替代方案,但我认为这与他的解决方案类似。我仍然需要为这些环境定义不同的目标。