Class JavaLaunchHelper is implemented in both ... libinstrument.dylib. One of the two will be used. Which one is undefined
Asked Answered
C

12

280

I upgraded to the latest Java 7u40 on MacOS X and started getting the following message on the console when launching my application using Eclipse. The app works fine but I would like to find out the cause of the problem and hopefully a fix for it.

objc[10012]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.

Does anyone know why this message is printed and how to fix it?

Clairvoyance answered 13/9, 2013 at 20:19 Comment(8)
Seems like this is also covered in this post, which suggests reverting to u25.Gook
While this might be a viable option to remedy this specific kind of problem - this might make you vulnerable to security leaks fixed in u45 and beyond.Burdett
The same thing is happening with jdk1.8.0_05Denudate
A year has passed and the bug is still nagging every Java developer that happens to use a Mac (verified with jdk1.7.0_67 on OS X 10.9.3). Shameful. Can anybody with the appropriate login please reopen these bugs bugs.java.com/bugdatabase/view_bug.do?bug_id=8021205 and bugs.openjdk.java.net/browse/JDK-8025876Apollus
Bug still exists for jdk1.8.0_25. Is this just a nagging message or an actual problem?Blais
Problem still exists in jdk1.8.0_60 with a slight difference: objc[3457] instead. From my experience in the past year since I last comment, it's did not affect runtime, so I am brushing it off as an annoying message.Blais
A bug report of this issue suggests a fix may be included with the JDK9 release. The same bug report says this: "For those who keep asking about this: The message is benign, there is no negative impact from this problem since both copies of that class are identical (compiled from the exact same source). It is purely a cosmetic issue."Dunlap
All these answers are insufficient because they aren't written in the context of someone using JEnv shims.Maunsell
L
180

⚠️ For JetBrains IntelliJ IDEA: Go to Help -> Edit Custom Properties.... Create the file if it asks you to create it. To disable the error message paste the following to the file you created:

idea_rt
idea.no.launcher=true

This will take effect on the restart of the IntelliJ.

Lacielacing answered 22/4, 2017 at 18:27 Comment(2)
The OP was using Eclipse, not IntelliJ. So you're giving them instructions for modifying settings in the wrong editor (hence it not being marked as correct).Poetize
I agree with @Poetize - if this answer included a means for Eclipse it would be excellent. But answering for the wrong IDE?Fortune
I
120

As of October 2017, this issue is now resolved in

In answered 3/4, 2017 at 10:32 Comment(3)
I just installed java version "1.8.0_144", and I faced the issue.Largess
@Largess you will, until build 152In
I had issues with jdk1.8.65 but jdk1.8.152 fixed this issue. ThanksSebastian
M
21
  1. Install Java 7u21 from: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u21-oth-JPR

  2. Set these variables:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
  3. Run your app and have fun :)

Millsap answered 11/2, 2014 at 15:10 Comment(6)
Works also for 1.8.0_92: # in .zshrc or .bashrc export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATHJespersen
@Lichtamberg thanks this fixed my issues on Java 8 mac osx. I have added your comment as an answer as almost all other answers work but are now absolute.Pratfall
@Millsap How will this environment variable solve the issue when both the implementation of the JavaLaunchHelper resides in the Home directory?Marder
@Lichtamberg I'm using sonar runner to start evaluating code coverage of my app. I'm still getting the same issue with the version you have mentioned above. though I've tried many 8 version with its patches in my mac os. No Luck.Gristmill
DO NOT DO THIS. Java 7u21 (besides being released in 2013 and thus having missed out on four years of patches big and small) has a arbitrary code execution vulnerability: gist.github.com/frohoff/24af7913611f8406eaf3Trustful
If you installed java via the official .dmg then it should have created a symlink at /Library/Java/Home which will point to the correct JAVA_HOME, therefore a cleaner approach would be adding to your ~/.bash_profile something like export JAVA_HOME=/Library/Java/Home. Then after upgrading java you won't need to update your .bash_profile.Instep
P
11

Copy Pasting @Lichtamberg's comments to gotoalberto's answer

Works also for Java 1.8:

# in ~/.zshrc and ~/.bashrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home 
export PATH=$JAVA_HOME/bin:$PATH 

This fixed my issue on java 8.

Pratfall answered 18/6, 2016 at 11:26 Comment(2)
Still experiencing the problem in Android Studio (2.2p3) after editing ~/.zshrc and ~/.bashrcMaeda
doesnt work for intellij, is there a next step after create / edit these files?Law
K
5

Not sure if this is the cause of the problem, but I got this issue only after installing JVM Monitor.

Uninstalling JVM Monitor solved the issue for me.

Kaitlin answered 17/2, 2015 at 12:40 Comment(3)
Same here, JVM Monitor for Eclipse was causing the message (JBoss 7.1, JDK 1.8.0.X).Unstressed
It started for me when I installed eclEmma plugin in eclipseMisquote
Same problem here. Uninstalled JVM monitor and this no longer shows upOstler
B
4

As other answers detail, this is a bug in the JDK (up to u45) which will be fixed in JDK7u60 - while this is not out yet, you may download the b01 from: https://jdk7.java.net/download.html

It's beta, but fixed that issue for me.

Burdett answered 10/12, 2013 at 12:28 Comment(4)
I installed u60 but still get Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.Ozoniferous
looks like it was re-introduced between b01 and b02Condemn
Any reference to the bug? URL ?Secessionist
Its actually not fixed still. They backed the fix out of u60Spondaic
R
3

https://groups.google.com/forum/#!topic/google-appengine-stackoverflow/QZGJg2tlfA4

From what I've found online, this is a bug introduced in JDK 1.7.0_45. I've read it will be fixed in the next release of Java, but it's not out yet. Supposedly, it was fixed in 1.7.0_60b01, but I can't find where to download it and 1.7.0_60b02 re-introduces the bug.

I managed to get around the problem by reverting back to JDK 1.7.0_25. Probably not the solution you wanted, but it's the only way I've been able to get it working. Don't forget add JDK 1.7.0_25 in Eclipse after installing the JDK.

Please DO NOT REPLY directly to this email but go to StackOverflow: Class JavaLaunchHelper is implemented in both. One of the two will be used. Which one is undefined

Resistant answered 18/2, 2014 at 14:22 Comment(0)
L
1

To solve this issue, I downgraded to JDK version 1.7.0_21. then I used this little bash script to change the version I use.

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }

 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }

Once you have the bash script in your zshrc/bshrc file, just call setJdk 1.7.0_21 and you're good to go.

Lemuellemuela answered 10/12, 2015 at 13:18 Comment(0)
M
0

Well, after some struggling, what worked for me was completely removing the current JDK, as described here:

sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -rf /Library/LaunchAgents/com.oracle.java.Java-Updater.plist
sudo rm -rf /Library/PrivilegedHelperTools/com.oracle.java.JavaUpdateHelper
sudo rm -rf /Library/LaunchDaemons/com.oracle.java.JavaUpdateHelper.plist
sudo rm -rf /Library/Preferences/com.oracle.java.Helper-Tool.plist

Then installed 1.7.0_21, which was downloaded from here.

Now java -version prompts:

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b12)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Mccutchen answered 4/7, 2016 at 0:31 Comment(0)
C
0

July 2019

OSX Mojave 10.14.5 (18F132) IntelliJ 2019-1 Community Edition. It worked setting idea.properties file. I also configured JAVA_HOME pointing to /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/

custom IntelliJ IDEA properties

idea_rt idea.no.launcher=true

Conjugation answered 5/7, 2019 at 2:50 Comment(0)
P
-1

If you're using IntelliJ & Mac just go to Project structure -> SDK and make sure that there is Java listed but it points to sth like

/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Rather than user home...

Phyllous answered 23/6, 2017 at 19:9 Comment(0)
L
-3

jdk-7u80-macosx-x64.dmg fix this problem.

Lobo answered 24/5, 2016 at 6:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.