2009-12-27 13 views
8

Tengo un archivo ejecutable JAR. Y tengo un script de compilación Ant que compila y luego crea este archivo JAR. Me gustaría que una tarea ejecute el archivo JAR también, pero tengo un argumento de línea de comando que debe pasar al JAR. Es un archivo de configuración. El objetivo de ejecución es inferior aPase un argumento de línea de comando a JAR en un script Ant

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

Cuando trato de hacer esto y ejecutarlo desde dentro de Eclipse consigo

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. 

La salida de error de Java es el sentido de mi error codificado "que no pasó una archivo de configuración como un argumento "que hace una copia de seguridad del error de la hormiga de" Problema: no se pudo crear la tarea o escribir arg ".

Entonces, ¿cómo se transfiere un argumento a un archivo JAR ejecutado desde Ant? ¿Es esto algo que no deberías hacer?

Respuesta

16

La etiqueta <arg> debe ser un elemento secundario de la etiqueta <java>. De esta manera:

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

En su pregunta <arg> es un hermano de <java> y la línea de argumento nunca se pasa al comando java.

6

Su instrucción arg no está anidada correctamente en la tarea java. Tiene que ser

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

usted puede hacerlo con algo como esto, así que si no se especifican argumentos que seguirá de todas formas:

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

    } 
} 
+0

no golpear a un caballo muerto, pero no veo cómo esto está abordando el problema en absoluto. – Dumpcats

Cuestiones relacionadas