为什么ANT告诉我,JAVA_HOME不对?

我得到的错误:

C:\ dev \ ws \ springapp \ build.xml:81:无法find一个javac编译器; com.sun.tools.javac.Main不在类path中。 也许JAVA_HOME不指向JDK。 它目前设置为“C:\ Program Files \ Java \ jre6”

但是我清楚地将我的JAVA_HOME设置为C:\ Program Files \ Java \ jdk1.6.0_14

ANT在哪里获得这个值?

当你说你已经将JAVA_HOME“清楚地设置”为“C:\ Program Files \ Java \ jdk1.6.0_14”时 – 你是从命令行运行“set”时看到了什么? 如果没有设置JAVA_HOME,我相信Ant会猜测JAVA_HOME的值…是否有可能设置了JAVAHOME而不是JAVA_HOME?

如果没有那样的话,我build议你编辑ant.batbatch file(不pipe是否调用了ant.bat文件),在开始和其他各个有趣的地方打印出JAVA_HOME。

  1. 在Eclipse中,单击运行外部工具外部工具configuration
  2. 点击JRE标签。
  3. 点击已安装的JRE …button。
  4. 点击添加button。
    (如果适用,请select标准虚拟机 。)
  5. 点击目录button。
  6. 浏览到您安装的Java的JDK版本(不是JRE)
    (例如C:\Program Files\Java\jdk1.7.0_04 )。
  7. 点击完成确定
  8. 单独的JRE上selectJDK,然后单击closures
  9. 重新运行你的Ant脚本 – 玩得开心!

这在我遇到的特定情况下工作。

我尝试使用以下命令运行Ant构build时遇到了同样的问题:

 java -cp ant.jar:ant-launcher.jar org.apache.tools.ant.Main 

命令的输出是:

 BUILD FAILED XXX/build.xml:8: 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. It is currently set to "/usr/lib/jvm/java-6-openjdk/jre" 

看起来,java可执行文件select“/ usr / lib / jvm / java-6-openjdk / jre”作为JAVA_HOME,而不是安装了JDK的“/ usr / lib / jvm / java-6-openjdk”。

我通过在我的<javac>任务中设置fork="yes"来解决这个问题。

看看: http : //ant.apache.org/manual/Tasks/javac.html

你也可能在你的JAVA_HOME设置中包含了/ bin,而Ant正在给它添加/ bin,因此没有find任何exe文件。 这发生在我身上:}

确保你使用尾随分号:这不起作用:

 set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29; 

这会:

 set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29 

我遇到了类似的问题。 我会链接运行Ant任务fron Maven构build,我得到了问题。 我已经将它固定为以下步骤:

  • 确保JAVA_HOME设置正确。 你可以在命令行中的Windowns上检查它:C:> echo%JAVA_HOME%结果如下:C:\ Progra〜1 \ Java \ jdk1.6.0_30 \
  • 将文件tools.jar从%JAVA_HOME%\ lib复制到Maven的lib目录。

它为我工作。

为了解决这个问题,在window-> preferences-> ant-> runtime中添加tools.jar文件。

在eclipse中,将已安装的JRE设置设置为项目中的项目(项目属性 – > Java构buildpath – >库)或首选项中的全局默认值(Java-> Installed JRE)。 eclispe设置比系统variables更强。

我希望你了解系统和用户的环境variables。 用户比系统更受欢迎。 如果你已经在系统variables中设置了JAVA_HOME,并且在用户variables中有相同的条目,那么你只能得到后者。

右键单击我的电脑,转到属性,select高级选项卡,然后单击环境variables以查看用户和系统环境variables的列表。

分号丢给我:我把JAVA_HOME设置为“C:\ jdk1.6.0_26;” 而不是“C:\ jdk1.6.0_26”。 按照Jon Skeet的build议检查ant.bat文件后,我删除了尾随分号。 这是该文件的一部分:

 if "%JAVA_HOME%" == "" goto noJavaHome if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome 

所以分号并没有被修剪掉,导致文件找不到,所以默认为“C:\ Java \ jre6”或类似的东西。

令人困惑的部分是HowtoBuild页面声明使用分号,但似乎打破它。

我面临着同样的问题,使得javac标签中的可执行属性被设置为javac.exe的位置,为我解决了这个问题。 这解决了这个问题

 <javac srcdir="${srcDir}" destdir="${buildDir}" fork="true" executable="C:\Program Files\Java\jdk1.7.0_03\bin\javac"/> 

实际上在superuser.com上find了这个答案,但是我不得不从JDK \ lib目录复制tools.jar到JRE \ lib目录。

使ZERO感觉…只有我能想到的是Sun在最新Java运行时(Java 7 Update 11)中引入了这个错误,或者在Ant中读取当前JDK位置时引入了一个错误(JRE比JDK更新显然这也是Sun的愚蠢……他们应该在每次更新JRE时释放JDK)。

我的JAVA_HOME设置正确。 我通过做“设置JAVA_HOME”来确认。 它指向我的JDK目录,拼写正确。 然而,Ant声称它找不到javac,但认为JAVA_HOME在我的JRE目录中。

在最新的Sun JRE7更新(10和11)之前,我的系统工作正常。 Ant是1.8.4版本

如果你有JAVA_HOME设置,但是有一个input错误,你也会看到一个jre6path的伪造引用。

当其他一切正确时,请尝试以下操作

  1. 转到窗口 – >首选项 – > Ant – >运行时 – > ClassPath
  2. 展开全局条目并检查此处提供的jdk工具。
  3. 从特定版本的Java中添加所需的tools.jar,例如“C:\ Program Files \ Java \ jdk1.6.0_45 \ lib \ tools.jar”
  4. 现在build立并检查结果。

注意:为要使用的java编译器添加tools.jar,并在存在多个tools.jar(java编译器)的时候,通过在tools.jar列表中将其移动到优先级。

我有同样的问题。 我的JAVA_HOME指向的JDK包没有任何tools.jar请确保您的JDK安装包含tools.jar

(显然消息错误令人困惑)

将环境variables中的JAVA_HOME设置为D:\Program Files\IBM\SDP\jdk不要给出任何引号或分号。 这对我很有用,请尝试解决scheme。 其实在ant.bat中检查相应的JAVA_HOME ,如果ant.bat不能find它,那么它的JAVA_HOME指向默认的JRE。

我也面临同样的问题。 我正在使用Windows 7,我有两个版本的Java安装。 首先我安装了最新版本的Java 7,然后是版本5。

我的java安装目录的内容:

 C:\Program Files\Java> jdk1.5.0_14 jdk1.7.0_17 jre1.5.0_14 jre7 

和我的JAVA_HOME被设置为正确的值,这是:

 C:\>set ja JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14 

但是我仍然遇到同样的问题:

 XXXXXXX\build.xml:478: The following error occurred while executing this line: XXXXXXX\build.xml:477: 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. It is currently set to "C:\Program Files\Java\jre7" 

在尝试了这个线程中的所有build议之后,我意识到了我的错误。 我试图在“用户variables”而不是“系统variables”部分设置环境variables。 在“系统variables”中设置后,它工作正常。 我面临另一个问题,但。

它指向的默认版本仍然是7。

 C:\>java -version java version "1.7.0_17" Java(TM) SE Runtime Environment (build 1.7.0_17-b02) Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing) 

我不知道如何使它指向版本5。

我在与Jenkins一起构build项目时遇到了这个问题。 首先,它找不到ant.bat ,通过向系统环境variablespath添加ant.bat的path来修复。 然后ant找不到jdk目录。 右键单击my computer > properties > advanced > environment variables然后创build一个名为JAVA_HOME的新环境variables,并为其分配一个值C:\Program Files\Java\jdk1.7.0_21 。 不要在用户variables中创build这个环境variables。 只在系统variables下创build它。
在这两种情况下,我都必须重新启动系统。

得到这个问题是很常见的。 我不能在我的系统中设置任何特定的Java家庭,因为我有两个不同版本的Java(Java 6和Java 7)适用于不同的环境。 为了解决这个问题,我在打开build.xml文件时将JDKpath包含在运行configuration中。 这样,2个不同的构build文件使用2个不同的Java版本来构build。 我认为可能有更好的解决scheme,但至less上述方法避免设置JAVA_HOMEvariables。

仅供参考,我正在使用Windows 7,必须重新启动Windows才能使新的JAVA_HOME设置生效。

有同样的问题;

 c:\jb\src\build.xml:191: 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. It is currently set to "C:\Program Files\Java\jre7" Total time: 0 seconds c:\jb\src>echo %JAVA_HOME% c:\Program Files\Java\jdk1.7.0_13 

解:

 path = c:\ant\bin\;%PATH% path = c:\Program Files\Java\jdk1.7.0_17\bin;%PATH% set "JAVA_HOME=c:\Program Files\Java\jdk1.7.0_13" 

我想单独的JDKpath指令会做到这一点,但我懒得弄清楚上面的解决scheme是防弹的。 🙂

也使用Windows7

快速解决同样的问题

将C:\ Program Files \ Java \ jdk1.6.0_14 \ lib \ tools.jar复制到C:\ Program Files \ Java \ jre6 \ lib \

这个exception是因为JAVA_HOME被设置为C:\ Program Files \ Java \ jre6而Ant无法在其中findtools.jar。

只需从以下步骤设置JDKpath:

  1. 转到“运行” – >“外部工具” – >“外部工具configuration”

  2. – >select'JRE'然后从DropDown列表中select可用的JDK。 恩。 jdk1.8.0_25

如果需要在eclipse中使用内置的eclipse jdk运行ant,请在build.xml中添加以下行

 <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>