2

プロジェクトのプロパティの「Javaコンパイラ」セクションには、「JDKコンプライアンス」の設定がいくつかあります。ソースの互換性を6に設定し、.classファイルの互換性を5に設定したかったのですが、これは明らかに許可されていません。「クラスファイルの互換性はソースの互換性以上である必要があります」というメッセージが表示されます。

これはEclipseの制限ですか、それともJavaバージョンの互換性の根本的な問題ですか?回避策はありますか?

開発とほとんどのターゲットでJava6を使用したいのですが、Macなどの一部のターゲットでJava5互換のアーティファクトを作成したいと思います。同じソースである限り、これが2つのビルドを持つことを意味する場合は問題ありません。

4

6 に答える 6

5

Eclipseが言うように、java6ソースからjava5クラスファイルを生成することはできません。それは単なるオプションではありません。java5ビルドを生成する必要がある場合は、java5ソースレベルを使用する必要があります。

本当にJava6ソースレベルを使用する必要がありますか?Java6 APIに使用する必要があるものがある場合、それらのビルドを実行しようとしても、Java5のビルドの生成は機能しません。Java6 APIを使用する必要がない場合は、Java6ソース互換性も使用する必要はありません。

于 2009-07-28T10:12:25.780 に答える
2

問題の一部は、クラス形式が変更されただけでなく、Java6がJava5とは異なるAPIを追加したために発生します。したがって、これらのAPIを誤って使用すると、Javaにデプロイするときに実装が失われる可能性があります。 5.5。

Java 5が重要な場合は、Java5SDKに対して開発およびビルドします。これが、すべてが期待どおりに機能することを知る唯一の確実な方法です。

私は(一度)クロスSDK互換のプロジェクトを設計しました。2つのビルド(SDKごとに1つ)が必要であり、コードは、使用中のSDKに応じて必要なAPIクラスを条件付きでロードする必要がありました。私は本当にそれをまったくアドバイスしません!

注:あなたはMacについて言及しています。Java 6はMacで利用できます(それがMacに言及する理由かどうかはわかりません)

于 2009-07-28T10:18:01.820 に答える
2

同様の(古い)問題を指摘しているこのスレッドも参照してください:
「Javaの理論と実践:以前のJDKでのJava5言語機能の使用」

ある種の外部ツールを使用してJava6バイトコードをJava1.5互換のバイトコードに変換しない限り、クラスコンプライアンスを1.5に、ソースコンプライアンスを6.0に設定することはできません。

于 2009-07-28T10:22:16.303 に答える
1

できません。
Java 6が必要ない場合は、Java5ソースレベルを使用してください。
Java 6が必要な場合は、Java5だけでコンパイルすることはできません。

于 2009-07-28T10:18:30.370 に答える
0

私もこれを行っていましたが、方法を忘れていました:(。以下のこのリンクを見つけました。これは、おそらく私自身のプロジェクトで行っていた方法を示しているようです。Eclipseクラスとソースバージョンを1.6に設定してからAnt ビルドを使用して、ビルド時に適切なクラス バージョンを取得します。

from: http://www.masutti.ch/eel/ (以前の回答ですでにリンクされています)

更新: Eclipse 3.2 では、ant スクリプトの javac 行でこれを別の方法で表示する必要があります。ソースとターゲットを次のように設定します。

javac (...) source="1.5" target="jsr14" (...)

簡単なプロジェクトで試してみたところ、Eclipse 3.4でうまくいきました。File->export->General->Ant Buildfiles を使用して、単純なプロジェクトの build.xml を自動生成できます。次に、この行を微調整しました:

'プロパティ名="ターゲット" 値="jsr14"/>

そしてそれを再構築しました。

ただし、かなりエラーが発生しやすいです。すべての「System.out.printf」を「System.out.print」に変更する必要がありました。そうしないと、例外がスローされます。ソース コンプライアンスを 1.4 に設定し、明白なもの (printfs など) を修正してから、元に戻すことで、ソースのチェックを行うことができます。

于 2009-08-19T05:59:12.867 に答える
0

実際、Eclipse IDE内ではなく、OPがやりたいことを正確に実行できることがわかりました。org.eclipse.jdt.core.compiler.codegen.targetPlatformファイル内のプロパティを手動で編集する必要がありproject>settings folder>org.eclipse.jdt.core.prefsます。

もちろん、そうすると、他のポスターでほのめかされているように、非常に悪い結果が得られる可能性があるため、この種のことは慎重に行ってください。

詳細については、これを参照してください。

于 2013-01-14T16:37:45.693 に答える