2011-07-18 29 views
11

¿Hay algún tutorial sobre cómo ejecutar Ant desde Java? Obtuve un código aquí: Setting JAVA_HOME when running Ant from JavaEjecutar hormiga desde Java

Pero no he podido hacer que funcione. He estado tratando de encontrar un ejemplo o tutorial sobre cómo usarlo realmente.

Esto es lo que tengo hasta ahora:

 
     Project p = new Project(); 
     p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
     p.fireBuildStarted(); 
     p.init(); 
     p.executeTarget("default"); 

Pero supongo que este error:

 
Exception in thread "main" Target "default" does not exist in the project "null". 
    at org.apache.tools.ant.Project.tsort(Project.java:1912) 
    at org.apache.tools.ant.Project.topoSort(Project.java:1820) 
    at org.apache.tools.ant.Project.topoSort(Project.java:1783) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
    at com.arthrocare.vss2svn.VSS2SVN.newProcess(VSS2SVN.java:128) 
    at com.arthrocare.vss2svn.VSS2SVN.main(VSS2SVN.java:52) 
Java Result: 1 

Probé especificando el proyecto con:

 
p.setUserProperty("ant.project.name", "VSS Project"); 

Pero no hubo suerte.

El archivo de hormigas especificado es correcto, ya que funciona perfectamente desde la línea de comandos.

ACTUALIZACIÓN

Después de un poco más de la búsqueda de llegar aquí: http://onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1

Es un gran tutorial.

Aquí está el código que tengo un poco antes de ver el código de la respuesta a continuación:

 
     Project project = new Project(); 
     ProjectHelper.configureProject(project, buildFile); 
     DefaultLogger consoleLogger = new DefaultLogger(); 
     consoleLogger.setErrorPrintStream(System.err); 
     consoleLogger.setOutputPrintStream(System.out); 
     consoleLogger.setMessageOutputLevel(Project.MSG_INFO); 
     project.addBuildListener(consoleLogger); 
     project.init(); 
     project.executeTarget(project.getDefaultTarget()); 

Pero por alguna razón, la tarea sigue fallando! Estoy usando una tarea de Visual Source Safe que necesita leer un valor de entorno en tiempo de ejecución, pero no lo ve con este enfoque. Al ejecutar el archivo build.xml de forma manual y con el siguiente código funciona:

 
     ProcessBuilder pb = new ProcessBuilder(); 
     Map env = pb.environment(); 
     String path = env.get("ANT_HOME"); 
     System.out.println(path); 
     pb.directory(new File(System.getProperty("user.home"))); 
     pb.command(path + System.getProperty("file.separator") 
       + "bin" + System.getProperty("file.separator") + "ant.bat"); 
     try { 
      Process p = pb.start(); 
     } catch (IOException ex) { 
      // 
     } 

Respuesta

14

Is there a tutorial on how to run Ant from Java?

parte de mi respuesta a this question podría ayudar:

See this article and this article :

File buildFile = new File("build.xml"); 
    Project p = new Project(); 
    p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
    p.init(); 
    ProjectHelper helper = ProjectHelper.getProjectHelper(); 
    p.addReference("ant.projectHelper", helper); 
    helper.parse(p, buildFile); 
    p.executeTarget(p.getDefaultTarget()); 
+0

Como yo iba a publicar la respuesta a mi propia Pregunta. Vi tu respuesta que se parecía mucho a la mía. Ahora recibo errores de la tarea que no puede ejecutar. Ejecutar la misma tarea desde el símbolo del sistema funciona perfectamente. ¿Alguna idea? – javydreamercsw

+0

@javydreamercsw, no estoy seguro de entender. ¿Dices que obtienes errores cuando ejecutas una tarea desde tu código java? Si es así puedes publicar el error? Es posible que desee editar la pregunta y agregar esto ... – Nivas

+0

Agregué el registro basado en su enlace a la otra respuesta y parece que cuando lo ejecuto desde Java no ve un usuario ariable (variable de entorno de Windows) que se ve desde el símbolo del sistema. – javydreamercsw

Cuestiones relacionadas