2012-11-18 119 views
0

有以下build.bat文件:为什么Ant不能找到javac?

echo off 
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25" 
set BUILD_CP="C:\Program Files\Java\jdk1.6.0_25\bin\lib\tools.jar";"C:\Program Files\Java\jdk1.6.0_25\bin";..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 
"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 

当我运行它,我得到:

构建失败

file:D:/Development/Java/Frameworks/JMeter/TestDemoIbatis/iBATIS_JPetStore-4.0.5/build/build.xml:29: Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK 

Total time: 0 seconds 
Press any key to continue . . . 

但我JAVA_HOMEPATH是正确set

enter image description here

更新:
Ant脚本:

<project name="JPetStore" default="all" basedir="."> 

    <property file="build.properties"/> 

    <path id="classpath"> 
    <pathelement location="${src}/"/> 
    <fileset dir="${lib}" includes="**/*.jar" /> 
    <fileset dir="${devlib}" includes="**/*.jar" /> 
    </path> 

    <target name="clean" > 
    <delete dir="${wars}"/> 
    <delete dir="${webapp}"/> 
    <delete> 
     <fileset dir="${src}" > 
     <include name="**/*.class"/> 
     </fileset> 
    </delete> 
    </target> 

    <target name="prepare" depends="clean"> 
    <mkdir dir="${wars}"/> 
    <mkdir dir="${webapp}"/> 
    <mkdir dir="${webapp}/WEB-INF/classes"/> 
    <mkdir dir="${webapp}/WEB-INF/lib"/> 
    </target> 

    <target name="compile" depends="prepare"> //LINE 29 that fails 
    <javac srcdir="${src}" destdir="${webapp}/WEB-INF/classes" deprecation="off" debug="${debug}"> 
     <classpath refid="classpath"/> 
    </javac> 
    </target> 

    <target name="assemble.view"> 
    <copy todir="${webapp}"> 
     <fileset dir="${web}"> 
     <include name="**/*.jsp"/> 
     <include name="**/*.html"/> 
     </fileset> 

    </copy> 
    </target> 

    <target name="assemble" depends="compile"> 
    <copy todir="${webapp}/WEB-INF/classes"> 
     <fileset dir="${src}" > 
     <exclude name="**/*.java"/> 
     <exclude name="**/*.class"/> 
     </fileset> 
    </copy> 
    <copy todir="${webapp}/WEB-INF/lib"> 
     <fileset dir="${lib}" /> 
    </copy> 
    <copy todir="${webapp}"> 
     <fileset dir="${web}" /> 
    </copy> 
    </target> 

    <target name="war" depends="assemble"> 
    <jar jarfile="${wars}/jpetstore.war"> 
     <fileset dir="${webapp}"> 
     <include name="**/*"/> 
     </fileset> 
    </jar> 
    </target> 

    <target name="all" depends="war" /> 

</project> 

有什么问题吗?我在Windows7/64-bit

+0

把你的ant脚本。 –

+0

你在ant脚本的javac目标中使用fork =“yes”吗? –

+0

@BhavikAmbani:更新OP – Cratylus

回答

0

这只是为我工作:

echo off 

set JAVA_HOME="c:\Program Files\Java\jdk1.6.0_25" 

set BUILD_CP=%JAVA_HOME%\lib\tools.jar;..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 

%JAVA_HOME%\bin\java -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 

注意,我不得不改变build.xml文件添加源= 1.4指令:

<javac srcdir="${src}" destdir="${webapp}/WEB-INF/classes" deprecation="off" debug="${debug}" source="1.4"> 
+0

你说得对'source'.I我也直接运行build时遇到过 – Cratylus

0

似乎是Program Files中的空间的某种问题。
以下@Chris评论我试图自己构建文件,并注意到ant -p因环境变量中的""而失败。
通过从JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25"制作JAVA_HOME=C:\Program Files\Java\jdk1.6.0_25我能够直接运行ant并成功构建。
我从来没有在JAVA_HOME空间的问题,我总是安装它在Program Files
所以我不确定这是否是Windows 7的某个问题。
如果有人可以解释为什么发生这种情况,我将迎来答案接受

+0

你可以尝试'C:\ PROGRA〜2 \ Java \ jdk1.6.0_25' – user75ponic

+0

作为一项规则,我从来没有将java保存在一个空间路径。 –

+0

@Chris当jdk在Windows下安装时,默认路径是'C:\ Program Files',并且'Program Files'文件夹中有空格。 – user75ponic

1

尝试把双引号的类路径以防止classpath中被分裂由于空间:

从这:

"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath "%BUILD_CP%" org.apache.tools.ant.Main -buildfile build.xml all 

编辑:

您也可以尝试从BUILD_CP中删除引号。

echo off 
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25" 
set BUILD_CP=C:\Program Files\Java\jdk1.6.0_25\bin\lib\tools.jar;C:\Program Files\Java\jdk1.6.0_25\bin;..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 
"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath "%BUILD_CP%" org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 
+0

这不起作用 – Cratylus

+0

我想另一种选择是尝试在不包含空格的文件夹中安装JDK? –

+0

我为什么要这样做?我从来没有问题。如果这是一个'Windows 7'的问题,并有一个参考推荐它,我会这样做 – Cratylus