问题
I'm having trouble compiling code which has a maven dependency on jline-0.9.94. Specifically, I'm compiling Groovy 1.7.6 using its default 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 dependency is correctly resolved, but strangely the setDefaultPrompt method does not appear to be present in the jar:
$ javap -classpath target/lib/compile/jline-0.9.94.jar jline.ConsoleReader | grep setDefaultPrompt
$
(Other methods appear missing from the javap output as well, but setDefaultPrompt is the one breaking my build.)
I've tried wiping out jline from my local maven repository and trying again, to no avail. I've also checked the jline jarfile from Maven Central as well as a mirror with the same results.
Oddly, I can copy the jar file to a different machine (a Sun) and perform the exact same steps and I see the setDefaultPrompt method in the jar file as expected. Others have successfully performed the same steps on a Mac as well.
What could be happening on my machine which would prevent the Java toolchain from seeing methods contained in the jar file?
回答1:
I had the same problem on my machine (compiling JRuby, rather than Groovy).
The solution to my problem was that I discovered an ancient jline jar at /Library/Java/Extensions/jline-0_9_5.jar, so I nuked it and replaced it with a more modern version.
回答2:
You must have different versions of the JAR file.
回答3:
Not reproducible on my Mac 10.5.8 with java 1.5.0_13
If you extract jline-0.9.94.jar
and read its 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 well backward compatible, but a distance between your 1.6.0_22 and 1.4.2_16 is very big.
So, I suppose you to recompile jline from source code.
来源:https://stackoverflow.com/questions/4655852/why-is-my-javap-output-different-than-yours-for-the-same-jar-file