私は現在java1.4でのみコンパイルされる大規模なレガシーコードベースに取り組んでいます。私がしなければならないことの1つは、1.6(おそらく今は1.7)で動作させることです。
現在、ヘッドビルドは1.6でコンパイルされていません。これには多くの理由があります。ほとんどの場合enum
、キーワードとして使用するなど、簡単に修正できますが、Java1.4で使用できないタイプをサポートするようにOracle/SunがJDBC(接続インターフェイス)を更新するのに苦労しています。つまり、1.6で動作するように変更を加えると、メインの本番ビルドNClob
は、1.4リリースにはないので、breakのようなクラスとしてbreakします。変更を加えないと、1.6コンパイラでコンパイルできません。
Javaで条件付きコンパイル/ビルドをサポートするパターンはありますか?私がこれまでに思いついた唯一の計画は、ビルドに応じてクラスを条件付きでスワップイン/スワップアウトするためにantビルドをいじることでした。これはかなり恐ろしいと感じるので、ここのコミュニティに考えを求めます。
繰り返しますが、問題の境界は次のとおりです。
- 1.4でコンパイルを続行できる必要があります
HEAD
(1.4互換モードの1.6はありません) - また、1.6でコンパイルする別のヘッドビルドも必要です-これには時間がかかると想定されているため(コードベースが大きいため)、ヘッドビルドを準備している間、他の人が作業を続けて他の変更を提供できるようにするための最初の箇条書きです1.6互換性のため。
- これは1つの巨大なコードツリーです。これは、私たちのコードがライブラリに依存していないことを意味し、簡単にそうすることはできません(覚えておいてください:レガシーコードベース
:(
) - 分岐は許可されていません(理由は、本当に必要な場合を除いて、私は入りません)
よろしくお願いします。
- なぜこれを行う必要があるのか知りたい人のために、私たちの状況はこれにいくぶん似ています:クラス階層でJava1.4と1.6バイトコードを混合する