NetBeans 7.4无法获取System Java编译器。请使用JDK,而不是JRE

时间:2014-03-10 22:03:02

标签: java google-app-engine netbeans

尝试使用NetBeans将项目部署到AppEngine时出现错误。 我安装了NetBeans插件,我可以使用appengine-java-sdk-1.9.0运行应用程序localy

当我尝试部署程序时,我收到以下消息:

Beginning interaction for module default...
0% Created staging directory at: 'C:\Users\Adi\AppData\Local\Temp\appcfg8079434123068806992.tmp'
5% Scanning for jsp files.
8% Compiling jsp files.

Error Details:
Mar 10, 2014 11:50:04 PM org.apache.jasper.JspC processFile
INFO: Built File: \guestbook.jsp


java.lang.RuntimeException: Cannot get the System Java Compiler. Please use a JDK, not a JRE.
Unable to update app: Cannot get the System Java Compiler. Please use a JDK, not a JRE.
Please see the logs [C:\Users\Adi\AppData\Local\Temp\appcfg5934545421821565182.log] for further information.

提前致谢。

3 个答案:

答案 0 :(得分:5)

首先,这是我在stackoverflow中的第一个答案。请考虑,如果我违反了一些规则,请不要犹豫,告诉我什么是错的,或者将来应该改变。

我遇到像Amir Rossert一样的问题。 我已经安装了Bundle" Netbeans 8 + JDK 8" (来自Oracle网站的jdk-8u25-nb-8_0_1-windows-x64.exe)。另外,我已经安装了JDK 7,这是我在不同情况下所需要的。

在Netbeans中,两个JDK都显示在Tools / Java Platform Manager下 JAVA SE

  • JDK 1.7
  • JDK 1.8(默认)

到目前为止一切顺利。 当我将JAVA_HOME更改为JDK 1.7(C:\ Program Files \ Java \ jdk1.7.0_72)时,我仍然得到 java -version 1.8!?

为什么:因为Netbeans

  1. 安装/复制了3个以下文件
    • 的java.exe
    • javaw.exe的
    • javaws.exe 进入 C:\ Windows \ System32
  2. 从目录 C:\ ProgramData \ Oracle \ Java \ javapath
  3. 链接它们
  4. 毕竟设置系统变量Path(不是PATH)= C:\ ProgramData \ Oracle \ Java \ javapath;
  5. 因此,每当我想使用1.7时,它都没有用,而是使用了1.8。 当我想部署到Google Appengine时,会发生异常:引起:java.lang.RuntimeException:无法获取System Java编译器。请使用JDK,而不是JRE。

    我这样解决了:

    1. 我删除了上面提到的所有三个文件( java.exe,javaw.exe,javaws.exe
    2. 我删除了目录 C:\ ProgramData \ Oracle \ Java \ javapath
    3. 我在系统变量路径中删除了值 C:\ ProgramData \ Oracle \ Java \ javapath;
    4. 之后我再次尝试在Google Appengine上进行部署,这次成功。

答案 1 :(得分:2)

我刚刚找到了这个问题的答案: appcfg无法找到javac?1

  

不幸的是,它比这复杂得多。路径中的第一个条目指向C:\ Windows \ system32。毫无疑问,存在于该文件夹中的java.exe实际上是C:\ Program Files \ Java \ jre6中的JRE。 (您可以通过运行一个小型Java程序自行测试):

     

的System.out.println(System.getProperty(" java.home&#34));

     

AppCfg使用当前运行的JVM的系统属性java.home来查找javac。由于您正在运行属于JRE的java.exe,因此它会在那里寻找编译器。不幸的是,自动找到最合适的java编译器并没有真正普遍一致或好的方法。对于我们的SDK,规则是您需要从SDK运行JVM,而不是从JRE运行JVM。正如我在上一篇文章中提到的,只需将Java SDK设置在路径的前面即可轻松实现。例如,

     

设置PATH = c:\ Program Files \ Java \ jdk1.6.0 \ bin;%PATH%

     

我们一直在考虑如何使这更简单,更具防弹性。

在编辑PATH之后,我能够使用NetBeans将我的应用程序部署到appengine。

答案 2 :(得分:0)

我不熟悉NetBeans,但我会给你在Eclipse上解决这个问题的步骤,希望你能找到相同的东西: -

  • 右键单击您的项目并选择属性
  • 转到java构建路径
  • 然后在库点击下,滚动到您选择的JRE系统库
  • 编辑JRE以指向JDK的安装目录。

如果上述操作已经完成,并且您只在部署时看到此类错误,请执行以下操作

  • 编辑IDE的配置设置文件并为其提供以下参数然后重新启动它,在Eclipse中它位于Eclipse所在的主目录并调用eclipse.ini

    -vm C:/ Program Files / Java / jdk1.7.0_51 / bin / javaw.exe