2011-06-20 130 views
2

我有一個Ant腳本,我想使用我製作的按鈕執行。現在的問題是,我會得到一個錯誤說:Eclipse無法編程編譯ant腳本

構建失敗

X:\ eclipseMT \運行時的工作區\ TESTTEST \ diagram1_Sc2_TestScript.xml:68: 無法找到javac編譯器; com.sun.tools.javac.Main不在 類路徑中。也許JAVA_HOME不指向JDK 。它當前設置 到「C:\ PROGRAM 文件\的Java \ jdk1.6.0_12 \ jre的」

我敢肯定,我的類路徑是正確的,我可以使用Eclipse的Ant內部執行相同的腳本遺囑執行人。

這是我的ant腳本:

<property name="src.dir" value="src" /> 
<property name="test.dir" value="test" /> 
<property name="test.wstest.dir" value="${test.dir}/wstest" /> 
<property name="junit.dir" location="X:\eclipseMT\plugins\org.junit_3.8.2.v3_8_2_v20100427-1100"/> 
<property name="build.dir" value="build" /> 
<property name="build.classes.dir" value="${build.dir}/classes" /> 
<property name="build.test.dir" value="${build.dir}/test"/> 
<property name="build.test.classes.dir" value="${build.test.dir}/classes" /> 
<property name="build.test.data.dir" value="${build.test.dir}/data" /> 
<property name="build.test.reports.dir" value="${build.test.dir}/reports" /> 
<property name="dist.dir" value="dist" /> 
<property name="lib.dir" value="lib" /> 
<property name="build.debug" value="true" /> 

<path id="compile.classpath"> 
    <fileset dir="lib"> 
     <include name="*.jar"/> 
    </fileset> 
</path> 

<path id="test.compile.classpath"> 
    <path refid="compile.classpath" /> 
    <pathelement location="${build.classes.dir}"/> 
</path> 

<path id="test.classpath"> 
    <path refid="test.compile.classpath" /> 
    <pathelement location="${build.test.classes.dir}"/> 
</path> 

<target name="init" description="create dir desc"> 
    <mkdir dir="${build.dir}" /> 
    <mkdir dir="${build.classes.dir}" /> 
    <mkdir dir="${dist.dir}" /> 
    <mkdir dir="${lib.dir}" /> 
    <copy todir="${lib.dir}"> 
     <fileset dir="${junit.dir}"/> 
    </copy> 
    <echo>make init dir done</echo> 
</target> 

<target name="test-init" depends="init" description="create test dir"> 
    <mkdir dir="${build.test.dir}" /> 
    <mkdir dir="${build.test.classes.dir}" /> 
    <mkdir dir="${build.test.data.dir}"/> 
    <mkdir dir="${build.test.reports.dir}"/> 
<echo>make test init dir done</echo> 
</target> 

<target name="clean" depends="init, test-init" description="remove previous build"> 
    <delete verbose="true"> 
     <fileset dir="${build.classes.dir}" /> 
     <fileset dir="${build.test.classes.dir}" /> 
     <fileset dir="${build.test.data.dir}" /> 
     <fileset dir="${build.test.reports.dir}" /> 
     <fileset dir="${dist.dir}" /> 
    </delete> 
    <echo>clean build dir done</echo> 
</target> 

<target name="compile" depends="clean" description="compile java source"> 
    <javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpath="${build.classes.dir}" debug="on" fork="no" includeAntRuntime="false" /> 
    <echo>compile source done</echo> 
</target> 

<target name="test-compile" depends="compile, test-init" description="compile test source"> 
    <javac srcdir="${test.wstest.dir}" destdir="${build.test.classes.dir}" debug="true" includeAntRuntime="true"> 
     <classpath refid="test.compile.classpath" /> 
    </javac> 
    <echo>compile test src done</echo> 
</target> 

<target name="test-reporting" depends="test-compile" description="report even if fail"> 
    <junit printsummary="false" errorproperty="test.failed" failureproperty="test.failed"> 
     <classpath> 
      <path refid="test.classpath" /> 
     </classpath> 
     <formatter type="brief" usefile="false" /> 
     <formatter type="xml" /> 
     <batchtest todir="${build.test.data.dir}" unless="testcase"> 
      <fileset dir="${build.test.classes.dir}" /> 
      <!--fileset dir="${build.test.classes.dir}" includes="Sc2TestClient*.class" /--> 
     </batchtest> 
    </junit> 

    <junitreport todir="${build.test.data.dir}"> 
     <fileset dir="${build.test.data.dir}"> 
      <include name="WSTEST-*.xml" /> 
     </fileset> 
     <report format="frames" todir="${build.test.reports.dir}" /> 
    </junitreport> 
    <fail if="test.failed"> 
     Test failed. Check ${build.test.reports.dir} 
    </fail> 
</target> 

<target name="default" depends="test-reporting" description="test the whole suite"> 
    <echo>all test done</echo> 
    <tstamp> 
     <format property="buildTime" pattern="yyyy-MM-dd' 'HH:mm:ss" /> 
    </tstamp> 
    <echo>build time = ${buildTime}</echo> 
</target> 

這是我的按鈕代碼:

Project p = new Project(); 

    try { 
     p.setUserProperty("ant.file", buildFile.getAbsolutePath());  

     DefaultLogger consoleLogger = new DefaultLogger(); 
     consoleLogger.setErrorPrintStream(System.err); 
     consoleLogger.setOutputPrintStream(System.out); 
     consoleLogger.setMessageOutputLevel(Project.MSG_INFO); 

     p.addBuildListener(consoleLogger);   
     p.fireBuildStarted(); 
     p.init(); 

     ProjectHelper helper = ProjectHelper.getProjectHelper(); 
     p.addReference("ant.projectHelper", helper); 
     helper.parse(p, buildFile); 
     p.executeTarget(p.getDefaultTarget()); 
     p.fireBuildFinished(null); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
     p.fireBuildFinished(t); 
     return false; 
    } 

回答

0

一個朋友給我這個問題早參考:Setting JAVA_HOME when running Ant from Java

問題basicly是螞蟻,因爲它指向java.home爲「JRE」,而不是'JDK'。每次調用ant時,它都會被覆蓋。

的解決方案是增加:

fork="yes"

到每個編譯腳本並添加:

p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_26");

到Java執行代碼。

希望這可以幫助其他人:D

1

它抱怨的javac,無法找到javac的..你的JAVA_HOME (C:\ Program Files \ Java \ jdk1.6.0_12 \ jre)僅指向「jre」而不是java編譯器(javac)。將您的JAVA_HOME設置爲「C:\ Program Files \ Java \ jdk1.6.0_12 \ bin」(它同時具有javac和jre),它應該可以工作。 :-)

--Nagesh Palathya

+0

嗨Nagesh。我的JAVA_HOME已經被設置爲JDK路徑。我仔細檢查了一下。是否有可能需要設置我的Java項目路徑?謝謝.. – Iso