同じJARファイルに対して、私のJavap出力があなたのものと違うのはなぜですか?

StackOverflow https://stackoverflow.com/questions/4655852

質問

JLine-0.9.94に依存しているコードをコンパイルするのに苦労しています。具体的には、コンパイルしています グルーヴィー1.7.6 デフォルトのANTターゲットを使用し、次のエラーを取得します。

[...]
-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メソッドは瓶に存在していないように見えます。

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

(Javap出力からも他の方法がないように見えますが、SetDefaultPromptは私のビルドを破るものです。)

私は地元のMavenリポジトリからJLineを一掃して、再試行しようとしましたが、役に立ちませんでした。また、Jline Jarfileをチェックしました メイブンセントラル 同じ結果の鏡と同様に。

奇妙なことに、JARファイルを別のマシン(太陽)にコピーしてまったく同じ手順を実行し、JARファイルにSetDefaultPromptメソッドが予想どおりに表示されます。他の人は、Macで同じステップを正常に実行しました。

JavaツールチェーンがJARファイルに含まれる方法を見るのを防ぐため、私のマシンで何が起こっているのでしょうか?

役に立ちましたか?

解決

私は自分のマシンで同じ問題を抱えていました(GroovyではなくJrubyをコンパイルします)。

私の問題の解決策は、/library/java/extensions/jline-0_9_5.jarで古代のjline jarを発見したことでした。

他のヒント

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

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

抽出する場合 jline-0.9.94.jar そしてそれを読んでください META-INF/MANIFEST.MF 次に、この瓶が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は非常に後方互換性がありますが、1.6.0_22と1.4.2_16の間の距離は非常に大きいです。

だから、私はあなたがjlineから再コンパイルすると思う ソースコード.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top