通过ant构建脚本将命令行参数传递给Java

时间:2013-01-09 14:22:10

标签: java ant command-line-arguments

运行以下命令时:

ant targetname -Dk1=v1 -Dk2=v2

我希望将命令行参数传递给java,例如java whatever -Dk1=v1 -Dk2=v2

我需要使用System.getPropertySystem.getenv

从Java代码访问这些参数

我需要在我的ant构建脚本中编写什么来实现这一目标?

或者我应该采取其他方法吗?

3 个答案:

答案 0 :(得分:15)

我不确定您希望如何传递这些值,但有几种机制:

  • 使用<sysproperty>传递您需要设置的系统属性:
  • 使用<arg>将命令行参数传递给Java类
  • 使用<jvmarg>将参数传递给Java命令本身
  • 如果您分叉Java任务,也可以设置环境变量。如果不分叉Java任务,则会忽略这些内容

此:

 $ foo=bar; java -Xlingc com.example.foo.bar -Dsys1=fu -Dsys2=barfu -arg1 -arg2 bar

变为:

<java classname="com.example.foo.bar"
    fork="true">
    <env key="foo" value="bar"/>
    <sysproperty key="sys1" value="fu"/>
    <sysproperty key="sys2" value="barfu"/>
    <jvmarg value="-Xlingc"/>
    <arg value="-arg1"/>
    <arg value="-arg2"/>
    <arg value="bar"/>
</java>

希望示例有帮助

答案 1 :(得分:4)

Ant脚本不好,但我做了类似下面的事情:

<target name="execute">
    <echo> Running MyClass ......... </echo>
    <java classname="pkg.MyClass" classpathref="libs">          
        <arg value="val1" /> <!-- command line args -->
        <arg value="val2" />
        <arg value="val3" />
        <env key="k1" value="v1" /> <!-- set environmental value -->
    </java>     
</target>

如果您使用的是Eclipse,则会在java标记下的弹出窗口中获得建议。我更喜欢:<sysproperty/>, <syspropertyset></syspropertyset>, <jvmarg/>

答案 2 :(得分:2)

使用<arg>任务中的嵌套<java>元素:

<java classname="test.Main">
     <arg value="${k1}"/>
     <arg value="${k2}"/>
     <classpath>
       <pathelement location="dist/test.jar"/>
       <pathelement path="${java.class.path}"/>
     </classpath>
   </java>