在Ant脚本中将命令行参数传递给JAR

时间:2009-12-27 03:26:37

标签: java ant

我有一个可执行文件JAR。我有一个Ant构建脚本,可以编译然后创建这个JAR文件。我想要一个运行JAR文件的任务,但是我有一个需要传递给JAR的命令行参数。这是一个配置文件。运行目标低于

<target name="run">
    <java jar="build/jar/ShoutGen.jar" fork="true"/>
    <arg line="/home/munderwo/workspace/ShoutGen-Java/ShoutGen.conf"/>
</target>

当我尝试这样做并从Eclipse中运行时,我得到了

Buildfile: /home/munderwo/workspace/ShoutGen-Java/build.xml
run:
     [java] No config file passed as an argument. Please pass a configuration file
     [java] Java Result: 16

BUILD FAILED
/home/munderwo/workspace/ShoutGen-Java/build.xml:24: Problem: failed to create task or type arg
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

Java输出的错误是我的编码错误,意思是“你没有将配置文件作为参数传递”,它支持“问题:创建任务或输入arg失败”的蚂蚁错误。

那么如何从Ant中将参数传递给已执行的JAR文件?这是你不应该做的事吗?

3 个答案:

答案 0 :(得分:16)

<arg>标记应该是<java>标记的子标记。像这样:

<target name="run">
    <java jar="build/jar/ShoutGen.jar" fork="true">
        <arg line="/home/munderwo/workspace/ShoutGen-Java/ShoutGen.conf"/>
    </java>
</target>

在你的问题中<arg><java>的兄弟,并且参数行永远不会传递给java命令。

答案 1 :(得分:6)

您的arg语句未正确嵌套在java任务中。它必须是

<java jar="...">
  <arg line="..." />
</java>

答案 2 :(得分:-3)

你可以用这样的东西来做,所以如果没有指定参数,它仍然会继续:

public static void main(String[] args) {
    try {
        String one = args[0];
        String two = args[1];
    }
    catch (ArrayIndexOutOfBoundsException e){
        System.out.println("ArrayIndexOutOfBoundsException caught");
    }
    finally {

    }
}