[英]Why can't Ant find javac?
有以下build.bat
文件:
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_HOME
, PATH
设置正确:
更新:
蚂蚁脚本:
<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
尝试在类路径周围加上双引号,以防止由于空格而将类路径拆分:
由此:
"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
似乎与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
JAVA_HOME="C:\\Program Files\\Java\\jdk1.6.0_25"
我能够直接运行ant
并成功构建。
我从没有JAVA_HOME
空格问题,我总是将其安装在Program Files
。
因此,我不确定这是否是Windows 7
问题。
如果有人可以解释为什么会发生这种情况,我会将答案标记为已接受
这只是为我工作:
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以添加source = 1.4指令:
<javac srcdir="${src}" destdir="${webapp}/WEB-INF/classes" deprecation="off" debug="${debug}" source="1.4">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.