4

私は Mac (したがって Java 1.6) を使用して、Java 1.5 でリリースされたクロスプラットフォーム アプリケーションを開発しています。私は、Eclipse が 1.5 への準拠を強制できることを発見しました。これにより、1.6 スタイルの @Override 構文を使用したコードを公開する必要がなくなりました。ただし、Eclipse のコンプライアンス検出は構文に限定されています。関数をキャッチしません。たとえば、1.6 の String.isEmpty() メソッドを使用しました。このメソッドは、Eclipse と Mac のコマンドラインで警告なしでビルドおよび実行されましたが、1.5 Linux マシンに移動すると壊れました。

おそらく、ビルド後にjarファイルで実行できるもの、または他の方法で、Macを離れずに、スリップした1.6-ismsをキャッチする方法はありますか?

4

8 に答える 8

3

良い質問。私の提案は、1.5 ライブラリを指すように Eclipse でプロジェクトのビルド パスを適切に構成することです。

まず、1.5 JDK または JRE をインストールします。次に、Eclipse プロジェクトの [プロパティ] に移動します。Java Build Path の下の Libraries タブをクリックし、「JRE System Library」というラベルの付いたエントリを見つけます。そのエントリを編集して、「代替 JRE」を指すようにします (JRE が最初にある場所を Eclipse に伝えるために、「Installed JREs」をクリックする必要がある場合があります)。1.5 JRE を選択します。

これは、1.5 API のみを持つ Java 5 rt.jar を使用する必要があります。

于 2010-09-21T17:49:40.897 に答える
2

Maven を使用している場合は、まさにそれがアニマル スニファーの目的です。

JDK バージョン 1.4 での実行をサポートする必要があるプロジェクトを開発しているが、開発システムで使用可能な JDK バージョン 1.4 がない場合、新しいバージョンの JDK でのみ使用可能なメソッドまたはクラスを誤って使用してしまう可能性があります。 . たとえば、新しいMacintoshで Maven 2.0.x 用のプラグインを開発している場合。

アニマル スニファーは、コンパイルされたコードが使用するクラスとメソッド シグネチャをチェックし、対象の API で使用可能なクラスとシグネチャのみを使用していることを確認できます。

于 2010-09-21T17:42:10.710 に答える
1

Mac Box で 1.5 Java バージョンを使用できない理由は何ですか。私は Mac マシンを持っており、Java 1.5 と 1.6 の両方のバージョンがあります。その場所が見つからない場合は、/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home にあります。

于 2010-09-21T17:44:21.893 に答える
0

この答えはハックであり、完全にテストされていませんが、機能するはずです。

Eclipseがコードをコンパイルするとき、現在のJREや指定されたJREに属するとをrt.jar使用します。tools.jar「通常の」JDKを新しいディレクトリにコピーして、Linux /Windows1.5ディストリビューションのJARファイルに置き換えることができます。そのJREを(環境設定で)Eclipseに代替として追加し、コードを検証するときにJREに切り替えます。

于 2010-09-21T17:36:05.143 に答える
0

本当に徹底した唯一の方法は、1.5 JDK をインストールしてコンパイルすることです。OS X に古いバージョンの Java をインストールできない場合は、VirtualBox をインストールし、その中に Linux をインストールし、その上に Java をインストールします。これは精神的な作業のように聞こえますが (おそらく精神的な作業です)、実際には非常に簡単で、完璧なビルドを実現します。

于 2010-09-21T17:42:58.710 に答える
0

通常どおり javac を介してコンパイルする場合、受け入れられるソース コードのバージョンを指定するコマンド ライン オプション -source release Java Oracle docがあります。

したがって、1.5 のみを使用してビルドするには、-source 5 または -source 1.5 を使用します。

于 2010-09-21T17:44:24.567 に答える
0

10.5 から OSX 10.6 にアップグレードしたと仮定すると、JDK v1.5 を JDK 1.6 と一緒にインストールする必要があります。それ以外の場合は、Appleからダウンロードできます。

その後、 antと JDK 1.5を使用してアプリをビルドできます。antは、JAVA_HOME 環境変数に設定した値に依存することに注意してください。

たとえば、 /Users/name/.bash_profileを編集して、JDK がインストールされている場所への実際のパスに基づいてこれらの値を含めることができます。

JAVA_HOME_14=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home
JAVA_HOME_15=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
JAVA_HOME_16=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

export JAVA_HOME=$JAVA_HOME_15
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

したがって、JDK 1.6 に切り替える必要がある場合は、単純に

export JAVA_HOME=$JAVA_HOME_15

と:

export JAVA_HOME=$JAVA_HOME_16
于 2010-09-21T17:59:24.123 に答える
0

この目的のためにDependencyFinderを使用します。これはまず、jar ファイル内のすべてのクラスのバイトコードを分析し、すべての依存関係を抽出します。その結果、アプリケーションによって参照されるすべてのクラス、コンストラクター、メソッド、およびメンバー属性を含む XML レポートが生成されます。

次に、この XML レポートは次の 2 つのステップでフィルタリングされます。

  1. 確認したい名前空間のクラス、コンストラクター、メソッド、およびメンバー属性のみを保持します。私の場合、java.*そしてjavax.*.
  2. 指定された JDK リリース (1.5 など) のすべての有効なシンボルをリストする「ホワイトリスト」に表示されるすべてのクラス、コンストラクター、メソッド、およびメンバー属性を除外します。

フィルタリング後のレポートにクラス、コンストラクター、メソッド、またはメンバー属性が含まれている場合 (つまり、これが空でない場合)、ビルドは中止されます。これは、対象の JDK リリースでサポートされていない API を使用していることを意味します。

少し冗長に聞こえますが、実際には非常にうまく機能し、IDE の設定に依存しません (複数の開発者が同じプロジェクトで作業している場合、これは実用的ではありません)。このタスクを自動化する ant マクロがありますが、もちろん、このソリューションに ant は実際には必要ありません。

于 2010-09-21T18:32:22.320 に答える