2011-07-18 62 views
11

有沒有關於如何從Java運行Ant的教程?我從這裏得到了一些代碼:Setting JAVA_HOME when running Ant from Java從Java運行ant

但是一直未能使它工作。我一直在試圖找到一個關於如何實際使用它的例子或教程。

這是我到目前爲止有:

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

但我想這個錯誤:

 
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 

我試圖與指定項目:

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

,但沒有運氣。

指定的ant文件是正確的,因爲它可以從命令行完美地工作。

UPDATE

再過了些搜索我來到這裏:http://onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1

這是一個偉大的教程。

這裏是我早一點比看到下面的答案代碼代碼:

 
     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()); 

但由於某些原因的任務仍然失敗!我正在使用一個Visual Source Safe任務,需要在運行時讀取一個環境值,但它沒有用這種方法看到它。手動和運行build.xml文件與下面的代碼工作:

 
     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) { 
      // 
     } 

回答

14

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

我的答案的一部分,this question可能會幫助:

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

當我要的答案張貼到我自己問題我看到你的答案很像我的答案。現在,我從無法執行的任務中收到錯誤。從命令提示符運行相同的任務完美地工作。任何想法? – javydreamercsw

+0

@javydreamercsw,我不知道我明白。你是否說從Java代碼執行任務時會出錯?如果是的話,你可以發佈錯誤?您可能想要編輯問題並添加此... – Nivas

+0

我添加了基於您的鏈接到其他答案的日誌記錄,似乎當我從Java運行它時,它看不到用戶可變(Windows環境變量)它從命令提示符處看到。 – javydreamercsw