执行以下命令时:
ant targetname -Dk1=v1 -Dk2=v2
我想把命令行参数传递给java
,就像java whatever -Dk1=v1 -Dk2=v2
。
我需要使用System.getProperty
或System.getenv
从Java代码访问这些参数。
我需要在我的ant构建脚本中写什么来实现这一点?
或者我应该采取其他方法吗?
我不确定您想如何传递这些值,但有几种机制:
- 使用
<sysproperty>
传递需要设置的系统属性: - 使用
<arg>
将命令行参数传递给Java类 - 使用
<jvmarg>
向Java命令本身传递参数 - 如果您派生Java任务,您也可以设置环境变量。如果您不fork 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>
希望这个例子有帮助
在Ant Script中不是很好,但我做了下面的事情:
<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/>
在<java>
任务中使用嵌套的<arg>
元素:
<java classname="test.Main">
<arg value="${k1}"/>
<arg value="${k2}"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>