Passing command line arguments to Java via ant build script

30,660

Solution 1

I'm not sure exactly how you want to pass these values, but there are several mechanisms:

  • Use <sysproperty> to pass system properties you need to set:
  • Use <arg> to pass command line arguments to your Java class
  • Use <jvmarg> to pass arguments to your Java command itself
  • If you fork your Java task, you can also set environment variables too. These are ignored if you don't fork the Java task

This:

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

Becomes:

<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>

Hope that example helps

Solution 2

Not good in Ant Script but I do something like below :

<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>

If you are using Eclipse, you will get suggestions in popup under java tag. I got few more like : <sysproperty/>, <syspropertyset></syspropertyset>, <jvmarg/>

Solution 3

Use the nested <arg> elements in your <java> task:

<java classname="test.Main">
     <arg value="${k1}"/>
     <arg value="${k2}"/>
     <classpath>
       <pathelement location="dist/test.jar"/>
       <pathelement path="${java.class.path}"/>
     </classpath>
   </java>
Share:
30,660
missingfaktor
Author by

missingfaktor

I am no longer active on this site, but if my posts help you and/or you need further help, do let me know on Twitter at @missingfaktor. I will try my best to respond! Note: This profile description was written for StackOverflow, and was copied to all other StackExchange sites as-is.

Updated on October 31, 2020

Comments

  • missingfaktor
    missingfaktor over 3 years

    On running the following command:

    ant targetname -Dk1=v1 -Dk2=v2
    

    I want the command line parameters passed down to java, like java whatever -Dk1=v1 -Dk2=v2.

    I need to access these parameters from Java code with System.getProperty or System.getenv.

    What do I need to write in my ant build script to make this happen?

    Or should I take some other approach altogether?