全体で約2000クラスの独自のAPIはほとんどありません。Path
それらのいくつかは、JDK7の新しいAPIを使用しています。ただし、他のほとんどのクラスは、新しいJDKAPIや新しい言語機能に依存していません。したがって、ほとんどのクラスはJDK6環境で使用できます(これを実行する予定です)。すべてのJDK7のみのクラスに。で注釈を付けたと仮定し@Java7Only
ます。
私が今必要としているのは、新しいバージョンの分岐や製品ラインを導入することなく、すべてのプロジェクトのJDK6のみのサブセットを多かれ少なかれ自動的に作成する方法です(維持するには複雑すぎます)。
すべてのプロジェクトはNetbeansを使用して作成されるため、Antを使用します。多くのプロジェクトは他のプロジェクトに依存しています。
私の問題に応じてどのアイデアが最も適切かを評価するのを手伝ってください。それぞれのアイデアでどのような問題が発生する可能性がありますか?
すべてのアイデアに共通の最初のステップ
- アノテーションプロセッサに
@Java7Only
-annotatedクラスを検索させ、リストをproperties
ファイルに保存させます。
アイデア1(特定)
properties
JDK7のみのファイルを除いて、ファイルを使用してプロジェクト全体を再帰的にコピーするツールを作成します。- antを呼び出してJDK6を使用してコピーしたプロジェクトをビルドし、JDK6準拠のjarを取得します。
アイデア2(具体的)
properties
このファイルを使用して、 JDK7のみのファイルを除くすべてをJavaCompilerインスタンスに渡す2番目のアノテーションプロセッサを記述します。- Java APIを使用してjarを作成するか、そのためにAntAPIを使用します。
(これはJavaのみのアイデアですが、おそらく複雑すぎます)
アイデアX(要約)
- どういうわけか(いくつかのターゲットを上書きすることによって)Antビルドプロセスに影響を与え、JDK6準拠のクラスごとに:Antに2つのバージョンをコンパイルさせます(1回はJDK6コンパイラで、もう1回はJDK7コンパイラで)。
- (もちろん、JDK7のみのクラスは、JDK7コンパイラを使用して1回だけコンパイルされます)
- 各束を別々の瓶にパッケージします。
アイデアに起こりうる一般的な問題
- 一部のプロジェクトは他のプロジェクトに依存しているため、一部のアクション(パッケージ化など)ではこれを考慮する必要があります。
- 覚えておいてください:JDK7コンパイラは下向きに互換性のないクラスファイルを生成します。そのため、考えられるすべてのアイデアはソースレベルで発生する必要があります(ビルドプロセスの前または最中、後ではありません)。