有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

ant通过类似-Denv=DEV的方式接受env参数,并使用不同的配置文件来生成war包。但是默认的目标是start,它将构建、部署和启动tomcat。我不希望ant部署war,也不希望在传入-Denv=PROD参数时启动服务器。我只想让蚂蚁建立根。战争够了

我知道我可以再打一个字来实现这个目标,但你知道我们都很懒D

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

  1. ant -Denv=DEV将构建、部署和启动服务器
  2. ant -Denv=PROD将只生成根目录。战争

共 (4) 个答案

  1. # 1 楼答案

    好吧,我放弃

    在使用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
    
    
  2. # 2 楼答案

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

  3. # 3 楼答案

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

    ant DEV
    

    或者

    ant PROD
    

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

  4. # 4 楼答案

    您还可以基于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>
    

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