JavaLaunchHelper 类在两个地方实现

Posted

技术标签:

【中文标题】JavaLaunchHelper 类在两个地方实现【英文标题】:Class JavaLaunchHelper is implemented in two places 【发布时间】:2017-08-17 14:22:49 【问题描述】:

今天我在 macOS Sierra 上升级了 Intellij Idea,现在,当我在控制台中运行应用程序时出现以下错误:

objc[3648]:JavaLaunchHelper 类在 /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java (0x10d19c4c0) 和 /Library/Java/JavaVirtualMachines/jdk1.8.0_121 中实现.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10ea194e0)。将使用两者之一。哪一个是未定义的。

【问题讨论】:

【参考方案1】:

同样的错误,我升级我的Junit 并解决它

org.junit.jupiter:junit-jupiter-api:5.0.0-M6

org.junit.jupiter:junit-jupiter-api:5.0.0

【讨论】:

【参考方案2】:

几年前这对我来说是个问题,我之前在 Eclipse 中通过从我的项目中排除 1.7 来修复它,但它再次成为我最近安装的 IntelliJ 的问题。我通过以下方式修复了它:

    卸载 JDK:

    cd /Library/Java/JavaVirtualMachines
    sudo rm -rf jdk1.8.0_45.jdk
    

    (我安装了jdk1.8.0_45.jdk;显然您应该卸载该文件夹中列出的任何Java版本。有问题的文件位于该文件夹中,应该删除。)

    Downloading and installing JDK 9。

请注意,下次创建新项目或打开现有项目时,您需要将项目 SDK 设置为指向新的 JDK 安装。如果您在 JavaVirtualMachines 文件夹中安装了 JDK 1.7(我相信这就是发生在我身上的事情),您也可能仍然会看到此错误,或者它会重新出现。

【讨论】:

【参考方案3】:

由于“此消息是无害的”(参见the @CrazyCoder's answer),一个简单安全的解决方法是您可以通过 IntelliJ IDEA 设置在控制台中折叠此嗡嗡声消息:

    【首选项】-【编辑】-【通用】-【控制台】-【折叠控制台行包含】 当然你也可以使用【Find Action...】(mac上cmd+shift+A)输入Fold console lines that contain,这样导航更有效。 添加Class JavaLaunchHelper is implemented in both

在我的电脑上,结果是:(LGTM :b )

您可以展开消息再次查看:

PS:

截至 2017 年 10 月,此问题现已在 jdk1.9/jdk1.8.152/jdk1.7.161 中得到解决 欲了解更多信息,请参阅the @muttonUp's answer)

【讨论】:

【参考方案4】:

我找到了另一种解决方法:从项目路径中排除 libinstrument.dylib。为此,请转到首选项 -> 构建、执行和部署 -> 编译器 -> 排除 - > + 并在此处按错误消息中的路径添加文件。

【讨论】:

【参考方案5】:

您可以在此处找到所有详细信息:

IDEA-170117 "objc: Class JavaLaunchHelper is implemented in both ..." 运行控制台中的警告

在 Mac 上,got triggered by the Java Agent 在启动应用程序时被 IDE 使用是 old bug in Java。此消息是无害的,可以安全地忽略。 Oracle 开发者评论:

消息是良性的,这个问题没有负面影响 因为该类的两个副本都是相同的(从确切的 同一来源)。这纯粹是一个表面问题。

Java 9 和Java 8 update 152 中的problem is fixed。

如果它以任何方式惹恼您或影响您的应用程序(不应该),IntelliJ IDEA 的解决方法是通过将 idea.no.launcher=true 添加到 idea.properties (Help | @987654331) 来禁用 idea_rt 启动器代理@)。解决方法将在下次重新启动 IDE 时生效。

不过,我不建议禁用 IntelliJ IDEA 启动器代理。它用于诸如正常关闭(退出按钮)、线程转储、解决命令行太长超出操作系统限制等问题的功能。仅仅为了隐藏无害的消息而失去这些功能可能不值得,但它是由你决定。

【讨论】:

idea_rt 是做什么的?有什么理由不禁用它? 它提供了优雅的退出、线程转储、处理可能超过操作系统限制的长类路径等。我不会禁用它,尤其是为了隐藏无害的消息。 我安装了 Java 8 更新 152,它解决了答案中的问题。谢谢。 什么时候通过oracle java se推送152? 已安装 IntelliJ CE 2018.2,运行 Java 8 更新 191:消息仍然存在。【参考方案6】:

我正在使用 Intellij Idea 2017,但遇到了同样的问题。对我来说解决问题的方法就是简单地

    在 intelliJ 中关闭项目 文件 -> 新建 -> 来自现有资源的项目 使用从外部模型导入(如果有) 再次打开项目。

【讨论】:

经典close then open解决方案=)) 我尝试了这里提供的所有解决方案作为答案,但只有这个解决方案对我有用。我建议在重新导入之前删除.idea 文件夹。 这在运行 Java 8 更新 151 的 macOS Sierra 上的 IDEA 2017.3.1 中对我不起作用。但是在重新启动 IDEA 并将我的项目设置为使用更新 152 后升级到 152 修复了它。【参考方案7】:

这发生在我安装 Intellij IDEA 2017 时,转到菜单首选项 -> 构建、执行、部署 -> 调试器并禁用选项:“强制适用于 JDK 1.3.x 及更早版本的经典 VM”。这对我有用。

【讨论】:

您可能还需要像 CrazyCoder 提到的那样禁用 idea_rt 启动器代理。将idea.no.launcher=true 添加到idea.properties (帮助| 编辑自定义属性...)。确保在此之后重新启动 IDE。 是的,自定义属性解决方法确实有效,您的建议对我的系统没有任何作用。您是否尝试过您的答案,即切换设置 - 我看不出 JDK 1.3.x 之前的选项如何产生任何影响?我在 Java 8 上。 对我来说,我一开始就尝试了自定义属性,它对我不起作用。然后我发现了这个禁用 JDK1.3.x 的解决方案。重启IDE后一切正常。 @DannyGuo 因为问题是由任何 Java 代理引起的,并且在调试模式下,Java 代理仍然用于现代 JVM,这仅在调试模式下为您解决了问题,但您会遇到问题启用启动器代理时处于运行模式。

以上是关于JavaLaunchHelper 类在两个地方实现的主要内容,如果未能解决你的问题,请参考以下文章

两者都实现了 JavaLaunchHelper 类。将使用两者之一。哪一个是未定义的[重复]

PLBuildVersion 类在两个框架中都实现

PLBuildVersion 类在两个框架中都实现

PLBuildVersion 类在两个框架中都实现

Class JavaLaunchHelper is implemented in two places

IBM Mobilefirst CLI 7.1.0 错误与 mfp start 和 mfp push