Why is my javap output different from yours for the same jar file?

I had a problem compiling code that has maven dependency on jline-0.9.94. In particular, I am compiling Groovy 1.7.6 using my Ant target and getting the following error:

[...] -banner: [echo] Java Runtime Environment version: 1.6.0_22 [echo] Java Runtime Environment vendor: Apple Inc. [echo] Ant version: Apache Ant version 1.7.1 compiled on June 27 2008 [echo] Operating system name: Mac OS X [echo] Operating system architecture: x86_64 [echo] Operating system version: 10.6.6 [echo] Base directory: /Users/ldhanson2/tmp/groovy-1.7.6 [echo] Java Home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home [...] -stagedcompile-groovy: [groovyc] Compiling 166 source files to /Users/ldhanson2/tmp/groovy-1.7.6/target/classes [groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: [groovyc] Compile error during compilation with javac. [groovyc] /Users/ldhanson2/tmp/groovy-1.7.6/src/main/groovy/ui/InteractiveShell.java:222: cannot find symbol [groovyc] symbol : method setDefaultPrompt(java.lang.String) [groovyc] location: class jline.ConsoleReader [groovyc] reader.setDefaultPrompt("groovy> "); [groovyc] ^ 

The jline match is correctly resolved, but, oddly enough, the setDefaultPrompt method is not present in the bank:

 $ javap -classpath target/lib/compile/jline-0.9.94.jar jline.ConsoleReader | grep setDefaultPrompt $ 

(Other methods are also missing in the javap output, but setDefaultPrompt is the one that breaks my assembly.)

I tried to destroy jline from my local maven repository and try again, but to no avail. I also checked the jarfile jline from Maven Central , as well as a mirror with the same results.

Oddly enough, I can copy the jar file to another machine (Sun) and follow the same steps, and I see the setDefaultPrompt method in the jar file, as expected. Others also followed the same steps on a Mac.

What can happen on my machine that prevents the Java toolchain from seeing the methods contained in the jar file?

0
java javap groovy macos jline
source share
3 answers

I had the same problem on my machine (compiling JRuby, not Groovy).

The solution to my problem was that I discovered an ancient jline jar in / Library / Java / Extensions / jline -0_9_5.jar, so I sketched it and replaced it with a more modern version.

0
source share

You must have different versions of the JAR file.

0
source share

Cannot play on my Mac 10.5.8 with java 1.5.0_13

If you extract jline-0.9.94.jar and read it META-INF/MANIFEST.MF , then you may find that this jar was compiled by java 1.4.2_16:

  Manifest-Version: 1.0
  Archiver-Version: Plexus Archiver
  Created-By: Apache Maven
  Built-By: jason
  Build-jdk: 1.4.2_16

JRE is good backward compatible, but the distance between your 1.6.0_22 and 1.4.2_16 is very large.

So, I assume that you recompile jline from the source code .

0
source share

All Articles