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

Java 打开zip文件或JAR清单时出错缺少:C:\Program,java,eclipse,google-app-engine,eclipse-wtp,Java,Eclipse,Google App Engine,Eclipse Wtp,我正在执行中的步骤“在服务器上运行项目”,遇到了一个问题: 初始化VM时出错 代理库无法初始化:仪器 打开zip文件或JAR清单时出错缺少:C:\Program 另一个人在此处报告了类似的问题:。但解决方案是针对一套不同的技术。我正在使用Eclipse、Web工具平台和Google应用程序引擎 很可能是因为我的Java安装在C:\Program Files中,该目录包含一个空格。但我不知道如何解决这个问题。我不知道如何安全地将Java\jre7目录移动到一个没有空格的目录。来自谷歌云平台支持的J

我正在执行中的步骤“在服务器上运行项目”,遇到了一个问题:

初始化VM时出错 代理库无法初始化:仪器 打开zip文件或JAR清单时出错缺少:C:\Program

另一个人在此处报告了类似的问题:。但解决方案是针对一套不同的技术。我正在使用Eclipse、Web工具平台和Google应用程序引擎


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

来自谷歌云平台支持的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传递的目录周围添加了双引号):


这解决了我的问题,我能够完成步骤“在服务器上运行项目”,从以管理员身份运行cmd。当您尝试启动服务器而不是以管理员身份启动服务器时,会出现此错误。

如果使用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 <Two full classspaths shown here> One of the two will be used. Which one is undefined.
类JavaLaunchHelper是在两种语言中实现的,将使用其中一种语言。哪一个是未定义的。

这似乎是由于JVM中的一个bug造成的,并且在1.8u152中(在MacOS X上)已经修复(在编写本文时,这被认为是一个早期的访问版本)。有关此JVM错误的更多信息,请参见另一个。

您只需将
添加到您的jar文件
-javaagent

在eclipse中使用清单文件导出jar,如下所示:

将清单文件与创建的jar合并。
CMD:jar ufm/Users/inzaam/Desktop/inzaa.jar META-INF/MANIFEST.MF

这几乎救了我一命。谢谢@克莉蒂斯:我无法理解这一点。请给出一个明确的例子好吗?如果是Intellij idea,我只需要将我的jar放入/opt/Intellij/bin目录,不需要完整路径、双引号或类meta-inf。但是无论如何,感谢您的详细阐述,这有助于理解它在低层上的工作原理。在Intellij
-javaagent中:“/Users/razvan/Downloads/dcevm8u232b09/Contents/Home/jre/lib/ext/hotswap agent.jar”
Class JavaLaunchHelper is implemented in both <Two full classspaths shown here> One of the two will be used. Which one is undefined.