Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过命令行参数更改默认ant目标_Java_Ant_Build Process_Build_Build Automation - Fatal编程技术网

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

Java 通过命令行参数更改默认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

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

ant通过like
-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建议您的解决方案作为替代方案,但我认为这与他的解决方案类似。我仍然需要为这些环境定义不同的目标。