打开zip文件或缺少JAR清单时出错:C:\ Program

我正在https://developers.google.com/appengine/docs/java/webtoolsplatform#dynamic_web_project上执行“在服务器上运行项目”,我遇到了一个问题:

在VM代理程序库初始化期间发生错误无法初始化:仪器错误打开zip文件或缺少JAR清单:C:\ Program

另一个人在这里报告了类似的问题: 错误打开zip文件或缺少JAR清单:C:/ Program 。 但解决方案是针对不同的技术。 我正在使用Eclipse,Web Tools Platform和Google-App-Engine。

很可能是因为我的Java安装在C:\ Program Files中,这是一个包含空格的目录。 但我不知道如何解决这个问题。 我不确定如何安全地将Java \ jre7目录移动到没有空格的目录中。

来自Google Cloud Platform Support的Jordan Fish帮助我解决了这个问题。 他说:

至于尝试启动dev_appserver时的错误消息,我相信这可能是由于项目的运行配置中的vm参数。 是否可以转到运行配置(选择项目,转到“运行”菜单并选择“运行配置”),单击“参数”选项卡,然后查看“VM参数”文本框中列出的内容?

这是我原来的VM参数:

-javaagent:C:\Program Files\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.4\appengine-java-sdk-1.9.4\lib\agent\appengine-agent.jar -Xmx512m -Dappengine.fullscan.seconds=5 -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=50 

这是我改变它的内容(在作为-javaagent:param传递的目录周围添加了双引号):

 -javaagent:"C:\Program Files\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.4\appengine-java-sdk-1.9.4\lib\agent\appengine-agent.jar" -Xmx512m -Dappengine.fullscan.seconds=5 -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=50 

这解决了我的问题,我能够从https://developers.google.com/appengine/docs/java/webtoolsplatform#dynamic_web_project完成“在服务器上运行项目”的步骤

你只需要在-javaagent后面的jar文件中添加""

如果您使用IntelliJ,解决方案似乎略有不同。 您需要以与Eclipse用户相同的方式编辑“运行配置”,但是使用以下格式添加“VM选项”:

-javaagent:[/absolute/path/DMEnhancerJava-1.0.jar][classes=META-INF/]

请注意冒号后的括号格式,每个参数没有空格。 如果您错过了,您将收到有关JavaAgent的运行时错误消息,期望该输入格式。

另外,请记住,如果您使用Maven或Gradle等构建工具并将其添加到JAVA_ARGS变量(通过类似MAVEN_OPTS),则需要将整个内容用双引号括起来。

第二个参数似乎是必要的,告诉DMEnhancer要检测什么(我的相对于我的类路径的顶层;因为我编译的POJO在META-INF目录中)。

最后,您可能会注意到有时会在VM内部的类路径中的两个位置上讨论正在实现的类时出错:

 Class JavaLaunchHelper is implemented in both  One of the two will be used. Which one is undefined. 

这似乎是因为JVM中的一个错误而在1.8u152中修复(在MacOS X上)(在撰写本文时,这被认为是这里提供的早期版本)。 有关此JVM错误的更多信息,请参阅此其他答案 。

以管理员身份运行cmd。 当您尝试启动服务器并且没有以管理员身份启动时,您会收到此错误。