2013-02-04 42 views
0

我有一個build.xml來爲我的應用程序生成Jar文件。ANT:如何從Java調用ANT build.xml文件

我想直接調用build.xml文件如下圖所示

import java.io.IOException; 

public class RunBuild { 

    public static void main(String args[]) throws IOException { 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec("/home/sai/Jan5WS/AntTest/build.xml"); 
    } 

} 

它不扔任何異常,但它不是生成jar文件。

我使用Ubuntu 12個螞蟻8.1 verions目前

有誰請告訴我可能是錯的?

感謝

編輯部分

我試圖運行它這樣

公共靜態無效的主要(字符串ARGS [])拋出IOException異常{

File buildFile = new File("build.xml", "/home/sai/Jan5WS/AntTest"); 
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()); 

}

Bu t投擲

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/AntMain 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$100(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.apache.tools.ant.Project.initProperties(Project.java:313) 
    at org.apache.tools.ant.Project.init(Project.java:300) 
    at RunBuild.main(RunBuild.java:15) 
+0

您是如何運行代碼的?你的班級路徑可能沒有全部庫。日誌中是否存在ClassNotFoundException? – Jayan

回答

0

build.xml文件是不可執行的文件。這只是一個普通的xml文件。您需要執行「ant」並通過代碼中的「-f」標誌爲其提供此build.xml文件的路徑。

0

嘗試一下它的工作對我來說....

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

public class CreateJar { 

     public static void main(String[] args) { 

       Process process; 
       try { 
         process = new ProcessBuilder("ant","-f" ,"/home/nitesh/Projects/ANT_DEMO/RPM_ANT/SIS/build.xml").start(); 
         process.waitFor(); 
         InputStream is = process.getInputStream(); 
        InputStreamReader isr = new InputStreamReader(is); 
        BufferedReader br = new BufferedReader(isr); 
        String line; 
        while ((line = br.readLine()) != null) { 
         System.out.println(line); 
        } 

       } catch (Exception e) { 
         e.printStackTrace(); 
       } 



     } 

} 

這裏的build.xml

<project name="rpmextract" default="jar" basedir="."> 
<property name="build" location="build"/> 
<target name="jar"> 
<jar destfile="app.jar" basedir="${build}/classes"/> 
</target> 
</project> 
1

你有兩個選擇:

  1. 在新的JVM執行螞蟻使用System.execute(「ant」,「-f」,「/home/nitesh/Projects/ANT_DEMO/RPM_ANT/SIS/build.xml」)
  2. 使用ProjectHelper, 代碼示例中相同的JVM執行的構建:

     File buildFile = new File("/home/sai/Jan5WS/AntTest", "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()); 

在這種情況下的ant.jar和螞蟻launcher.jar必須是類路徑。

0

我有同樣的問題,我用下面的步驟來解決它:

1.-下載螞蟻launcher.jar爲您螞蟻版本

2。 - 將其添加到您的庫中

enter image description here