0

jline-0.9.94 に依存する Maven を持つコードのコンパイルに問題があります。具体的には、デフォルトの Ant ターゲットを使用してGroovy 1.7.6をコンパイルすると、次のエラーが発生します。

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

jline の依存関係は正しく解決されていますが、不思議なことに setDefaultPrompt メソッドが jar に存在していないようです。

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

(他のメソッドも javap 出力から欠落しているように見えますが、setDefaultPrompt は私のビルドを壊すものです。)

ローカルの Maven リポジトリから jline を消去して再試行しましたが、役に立ちませんでした。Maven Centralの jline jarfileと同じ結果のミラーもチェックしました。

奇妙なことに、jar ファイルを別のマシン (Sun) にコピーして、まったく同じ手順を実行すると、jar ファイルに setDefaultPrompt メソッドが期待どおりに表示されます。他の人は、Mac でも同じ手順を実行して成功しています。

私のマシンで、Java ツールチェーンが jar ファイルに含まれるメソッドを認識できない原因は何ですか?

4

3 に答える 3

0

私のマシンでも同じ問題がありました (Groovy ではなく JRuby をコンパイルしています)。

私の問題の解決策は、/Library/Java/Extensions/jline-0_9_5.jar で古い jline jar を発見したことでした。そのため、それを削除して、より新しいバージョンに置き換えました。

于 2011-04-03T15:15:10.310 に答える
0

JAR ファイルの異なるバージョンが必要です。

于 2011-01-11T09:08:01.370 に答える
0

Java 1.5.0_13 を使用した Mac 10.5.8 では再現できません

それを抽出jline-0.9.94.jarして読むとMETA-INF/MANIFEST.MF、この jar が Java 1.4.2_16 によってコンパイルされたことがわかる場合があります。

マニフェスト バージョン: 1.0
 アーカイバ バージョン: Plexus アーカイバ
 作成者: Apache Maven
 作成者: ジェイソン
 ビルド-JDK: 1.4.2_16

JRE は下位互換性が良好ですが、1.6.0_22 と 1.4.2_16 の間の距離は非常に大きいです。

というわけで、ソースコードから jline を再コンパイルするとします。

于 2011-02-02T12:52:00.780 に答える