2009-06-10 13 views
7

私はジェネリックスといくつかのJava 1.5/6ビットとを使用するプロジェクトを持っています。 1.4 JREを実行しているシステムでこのコードをコンパイルすることはできますか?1.4用にコンパイルされたJavaコードを1.4 JREでコンパイルするには?

私は、ライブラリをコンパイルするためにANTビルドスクリプトとjavacタスクを使用します。これは、ターゲット属性が1.5である間にうまく構築されます。

私は1.4であることを、ターゲットを変更した場合、私は次のエラーを取得する:

generics are not supported in -source 1.4 
(use -source 5 or higher to enable generics) 

だから私は、ソース属性を追加し、5および1.5の値を試してみてください。新しいエラー:

javac: source release 5 requires target release 1.5 

私はすべてのコードを実行して、この作業を行うために1.5のものを変更する必要がありますか?

+0

注記1.4は、サービスの有効期間が終了し、1.5が終了します。ただし、Java for Businessのサポートは有料で利用できます。 –

答えて

7

私はこれらのソリューションのいずれかを使用していませんでしたが、

がありますサポートされていない -target jsr14 よい作業
  • Retrotranslator
  • Declawer
  • を指定
    1. Retroweaver
    2. JBossRetro

    また、(ただし、あなたのオリジナルのソースを上書きしないように注意してください)javac -XD-printflat役に立つかもしれません。

    +0

    もう1つはうまくいくようです。今、ライブラリがJRE 1.4で実際に動作することをテストするために... –

    +1

    jsr14はそれをカットしません。列挙型サポートはありません。一方、Retroweaverは素晴らしいです。 –

    +0

    ありがとう、私は今までRetroweaverを認識していました。それらのツールのほとんどは明示的に1.4をターゲットにできると述べていますが、私が見る限り、RetroweaverだけではJ2ME開発に必要な1.2もターゲットにすることができます。 –

    0

    ジェネリックは、タイプ消去によって実装されるので、ジェネリックが導入される前に動作するはずです。しかし、あなたは、コンパイラの古いバージョンを使用してコードをコンパイルすることはできないであろう(あなたがいることをしたいと思う理由を私は知らない)

    +0

    JDK 1.6コンパイラの使用。ターゲットバージョンとソースバージョンを指定できるのは奇妙に思えますが、これらが同じでない場合はエラーとなります。 –

    +0

    ターゲットバージョンよりも前のソースバージョンを指定できます。 enumというenumを持つ1.4ソースはコンパイルされていて、変更されていない稼働中のJDKに対しても動作します。 –

    6

    I have a project that uses generics and a few Java 1.5/6 bits and pieces. Is it possible to compile this code to work on a system running a 1.4 JRE?

    Am I going to have to go through all my code and change the 1.5 stuff to make this work?

    はい。しかし、Retroweaverというツールを使って、それを自動化する方法があります。しかし、それがすべてを捕まえるという保証はありません。

    1

    私はRetrotranslator(retroweaverは私が必要としていたものではうまく動作せず、正確に何を覚えていないか)で良い経験をしています。

    私の目的(LogbackのJDK1.4バージョンの作成)は非常にうまくいきました。

    関連する問題