java - 为什么 Ant 找不到 javac?

标签 java windows ant build ibatis

有以下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_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位

最佳答案

尝试在类路径两边加上双引号,以防止类路径因空格而被分割:

从此:

"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  

关于java - 为什么 Ant 找不到 javac?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439611/

相关文章:

java - 从调用者类停止异步 Spring 方法

ant - 如何重置 ANT 中的属性?

java - isDirectory 对于 svn 下文件夹上的 ant 任务返回 false

java - 在版本控制下的 Eclipse 项目中创建一个新的根目录

java - 从父文件夹导入包

java - 当我尝试从 Outlook Web 访问发送邮件时出现 java 运行时异常

java - Gradle:同一项目中的 Java 和 Android 子项目

C++ WriteToProcessMemory() 意外结果

c# - 系统设备位置不起作用

windows - IntelliJ 终端 CTRL+C 不起作用