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

11
运行以下命令:
ant targetname -Dk1=v1 -Dk2=v2

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

我需要使用System.getPropertySystem.getenv从Java代码中访问这些参数。

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

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


你的意思是从ant内部调用Java解释器并想将这些选项传递下去? - fge
@fge,我希望在我的构建脚本中可以指定这些参数在运行项目时传递给 java - missingfaktor
3个回答

22

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

  • 使用<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>
希望这个例子能够帮助。

5

我对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/>等更多内容。


3

在您的<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接