2009-07-07 3 views
1

パラメータ-sources 1.5-target 1.5を使用してJavaバージョン1.6でソースをコンパイルしましたが、コンパイラはまったく文句を言っていません。Javaと "frontwards"の互換性に関する質問

まだ、アプリケーションはメソッドがないためにjava 1.5で実行されません。もちろん、ソースコードの一部を1.5に準拠させるために書き直すこともできますが、わかりません。下のjavaバイトコードは "前向き"に準拠するべきではありませんか?

バイトコードに変換されたメソッドはありませんか? 1.6 libs/methods(formely String.isEmpty())を1.5バイトコードにコンパイルし、すべてをアーカイブにパックすることは可能ですか?

答えて

3

必要なコマンドラインオプションのフルセットは、以下のとおりです。

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar 

(変更ブートクラスパスをするしかし、あなたのマシンが設定されています。)もちろん

、1.6でのAPIの機能強化が1.5になりません。 1.5は、サービスライフサイクルの終了期間の大部分を占めるため、とにかく最小限の1.6を検討したいと思うかもしれません。

+0

完全に統合されたJavaを搭載した唯一のOSであるMac OSXの問題は、Mac OS Xでは確かに利用可能である1.6 /: –

+0

です.6u10プラグインのバージョンもあると思います。残念ながら、残念ながら、サポートされているMac OS Xのすべてのバージョンでデフォルトでは1.6となっています。 –

+0

私は64ビットバージョン –

1

私はJavaがネイティブJavaコードを逆コンパイルするとは思わない。したがって、1.6の呼び出しを行うと、1.5でアクセスすることはできません。

+0

実行中のJREが1.6の場合、すべてのJREがコードを実行しているかどうかに依存します。これはライブラリを提供しています。 –

6

基本Javaライブラリメソッドを意味する場合は、コンパイル時にこれらのメソッドはバイトコードに変換されません。すでにSun(またはサードパーティのJVMディストリビューター)によってバイトコードにコンパイルされ、オペレーティングシステムにインストールされています。それらはで、と表示され、コンパイルされたコードで使用されます。

1

コンパイルするライブラリを古いライブラリに変更することができます。 eclipseのようなパッケージでは、インストールされた各JDKが「ライブラリの選択」ウィンドウに表示され、コンパイルするものを選択できます。

そうでない場合は、antファイルまたはCLIのコンパイルコマンドで上書きできるはずです。

古いJVMを対象としている場合は、これが本当に行われているか、利用できない呼び出しを使用する可能性があります。

1

ソースパラメータは、コンパイラが言語構文レベルでチェックするだけです(source = 1.4は、ジェネリックスに遭遇した場合などは不平を言います)が、指定されたJavaバージョンで利用可能なAPIを使用することだけに制限するものではありません。

targetパラメータは、指定されたバージョンの実行時に使用できるクラス出力ファイルですが、(-sourceと同じように)API準拠の検証は行いません。

関連する問題