Domanda

Ho problemi compilazione di codice che ha una dipendenza Maven su jline-0.9.94. In particolare, sto compilando Groovy 1.7.6 utilizzando suo default target Ant e ottenere il seguente errore:

[...]
-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]               ^

La dipendenza jline è correttamente risolto, ma stranamente il metodo setDefaultPrompt non sembra essere presente nel vaso:

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

(Altri metodi apparire manca l'uscita javap pure, ma setDefaultPrompt è quello spezzando il build.)

Ho provato a spazzare via jline dal mio repository Maven locale e provare di nuovo, senza alcun risultato. Ho anche controllato il jarfile jline da Maven centrale così come uno specchio con gli stessi risultati.

Stranamente, posso copiare il file jar ad una macchina diversa (un Sole) ed eseguire la stessa procedura e vedo il metodo setDefaultPrompt nel file jar come previsto. Altri hanno eseguito con successo la stessa procedura su un Mac pure.

Che cosa potrebbe accadere sulla mia macchina che impedirebbe la toolchain Java di vedere metodi contenuti nel file jar?

È stato utile?

Soluzione

Ho avuto lo stesso problema sulla mia macchina (compilazione JRuby, piuttosto che Groovy).

La soluzione al mio problema è che ho scoperto un antico vaso jline a /Library/Java/Extensions/jline-0_9_5.jar, così ho nuked esso e lo ha sostituito con una versione più moderna.

Altri suggerimenti

È necessario disporre di diverse versioni del file JAR.

Non è riproducibile sul mio Mac 10.5.8 con Java 1.5.0_13

Se si estrae jline-0.9.94.jar e leggere la sua META-INF/MANIFEST.MF allora si potrebbe scoprire che questo barattolo è stato compilato da 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 è ben compatibile, ma una distanza tra la 1.6.0_22 e 1.4.2_16 è molto grande.

Quindi, io supporti a jline ricompilazione da codice sorgente .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top