1

2 つの Java アーティファクトをビルドしています。PowerMock は 1.7 と互換性がなく、多くの単体テストで使用しているため、1.6 でビルドする必要があります。PowerMock を今すぐリファクタリングすることは、時間がかかりすぎるため、オプションではありません。

ただし、1.7 でビルドされた Java アプリケーションでこのアーティファクトを使用し、すべてを 1.7 で実行したいと考えています。いくつかのクラスファイルを構築しているだけなので、問題ないと思いますが、おそらく1.2以前までさかのぼって大幅に変更されたとは思えませんとにかく、私は明らかにこれについてあいまいな理解を持っています.Javaの専門家に、これがいつ問題になるのか、いつ問題にならないのか、そしてその理由について深く掘り下げて説明してもらいたいと思っています.

ありがとう!

4

2 に答える 2

1

コンパイルされたコードは下位互換性がある必要があるため、すべてを java7 で実行する場合、一部が java6 を使用してコンパイルされたかどうかは問題ではありません。

他の方法を試すと、無効なメジャー/マイナー バージョン番号エラーが発生します。

Java 6 と 7 のコードを混在させて一致させることもできると思います。これは、(注意して) ジェネリック Java の前後で混在させて一致させることができるのと同じです。

于 2013-10-24T00:16:01.313 に答える
1

Java は通常、バージョン間で下位互換性があるため、古いバージョンでコンパイルされたものは新しい JVM で正常に動作するはずです。実際、多くの一般的なライブラリは、まだ古い JVM に行き詰まっている人を増やすために新しい機能が必要でない限り、できるだけ古いバージョン (通常は現在 Java 5) でコンパイルされています。

そうは言っても、心配する必要がある落とし穴がいくつかあります。Java 6 から 7 への変換で発生した問題の 1 つは、初期値が null の TreeMap でした

EDIT これは、6と7の間で互換性がないものについて議論しているOracleへのリンクですが、これは再コンパイルされたものにのみ影響すると思います: http://www.oracle.com/technetwork/java/javase/compatibility-417013.html

于 2013-10-24T00:19:41.107 に答える