【问题标题】:How to switch from Java 7 to Java 6 in Eclipse for Google App Engine?如何在 Eclipse for Google App Engine 中从 Java 7 切换到 Java 6?
【发布时间】:2013-01-11 11:27:02
【问题描述】:

我使用 Google Web Toolkit 开发了一个小型应用程序,并希望将其部署到 Google App Engine (GAE) 服务器。我默认使用 Eclipse Juno 和 Java 7,但是当我尝试部署到 GAE 时,我意识到它还不支持 Java 7。所以我在项目设置中切换到 Java 6 JRE(将 Build Path/Libraries 设置为“java-6-openjdk-amd64”,Java Compiler/Compiler 合规级别设置为 1.6。

但是,当我尝试通过 Google Eclipse 插件部署我的应用程序时,它仍然会抛出相同的 RuntimeException:

"应用程序包含 Java 7 类,但 --use_java7 标志具有 未设置。”

这是完整的调试输出:

Unable to update:
java.lang.RuntimeException: The application contains Java 7 classes, but the --use_java7 flag has not been set.
        at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:576)
        at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:370)
        at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:53)
        at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:433)
        at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:148)
        at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

如何删除 Java 7 的剩余部分以便 Google 插件能够理解?

这一切都在 Ubuntu 12.10 64 位上运行。

【问题讨论】:

  • 您在部署之前“清理”过您的项目吗?项目 -> 清理
  • 是的,我做到了。不过没有区别。 :(
  • 尝试使用 java 6 JDK 启动 eclipse,如下所述:wiki.eclipse.org/Eclipse.ini#-vm_value:_Linux_Example。使用 JDK 而不是 JRE,因为 GAE 仅适用于 Java JDK(版本 6 或更低版本)。
  • 完成了,但没有运气。我在 eclipse.ini 中添加了两行 `-vm /usr/lib/jvm/java-1.6.0-openjdk/bin/java',进行了清理并重新编译了项目,但错误仍然存​​在。该文件存在并且在 JDK 中。
  • 项目 -> 属性 -> 项目构面 -> Java 设置为 1.6?

标签: java eclipse google-app-engine


【解决方案1】:

您可能正在使用 Java 7 安装进行编译。在 Eclipse 中,转到 Window > Preferences。在那里,浏览到 Java > Installed JREs

右侧的列表可能仅显示您的情况下的 jre/jdk7。您必须在此处添加 Java 5 或 6 的安装,并确保它是“勾选”的 JRE。

之后,使用Project > Clean...,选择“Clean All Projects”并确保勾选“Start a build immediatly”以及“build the entire workspace”。 p>

[编辑:这个答案对于 android 开发来说并不准确......当我意识到这一点时,快速搜索显示这个问题看起来很接近 Failed to deploy to Google App Engine because --use_java7 flag has not been set,答案可能是一样的。]

【讨论】:

  • 这样做了,但很不情愿,因为我的其他项目实际上需要 Java 7,但它带来了一些进步。唉,当我现在执行清理操作时,我得到一个 RuntimeException “原因:java.lang.UnsupportedClassVersionError: com/schnobo/entropie/client/Entropie : Unsupported major.minor version 51.0”。这清楚地表明 Java 7 编译器仍然编译了一些东西,但我想我已经在我的 Eclipse 设置中删除了所有指向 Java 7 的指针。
  • 您在“清理”期间遇到此异常?看起来更像是应该在运行时弹出的东西。我不太了解您的环境:我在编辑中链接的问题提到 GAE 使用一些 Java 7 功能,这意味着它是针对 jdk 7 编译的,并且只能在 Java 7 本身下运行......因此,您的程序运行应该是 java 7... 并且此异常告诉我们其他情况(在运行使用 java n 编译的类和较早的 vm 时抛出)。如果没有对环境有更好的了解,恐怕我无法做出有意义的回答。
  • 我假设这个异常实际上是在清理后自动执行的构建过程中引发的。恐怕我会尝试启动一个新的 Java 7 项目,手动复制所有文件,看看效果如何。
  • 如果这确实是由“干净”提出的......只有在依赖于 com.schnobo.entropie.client.Entropie 类的类的编译过程中发生这种情况才有意义。这意味着你要么没有清理整个工作区(至少,你没有清理包含这个“熵”类的项目),或者你试图用 Java 6 编译一个类 X,而这个类依赖于一个第三方库(熵),它本身是在 Java 7 下编译的......这是不可能的。如果你依赖的库是为 7 编译的,你的必须为 7 编译。
【解决方案2】:

我最终能帮助它的唯一方法是在 Eclipse 中创建一个新项目,立即切换到 Java 6(构建路径、编译器、Java 方面),然后复制/粘贴上一个项目中的所有文件和 GAE 设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2010-11-10
    • 1970-01-01
    • 2012-06-13
    • 2010-10-22
    • 2010-11-27
    相关资源
    最近更新 更多