3

いくつかのJavaプロジェクト(Maven内)を備えたEclipseワークスペースがあります。これらは互いに依存関係があります。最近、Java 1.7をターゲットにするようにプロジェクトの一部だけを変更し始めました。いくつかの新しい警告を解決する以外は、コンパイル時に何も変わりません。

しかし、すべてを実行しようとすると、何かがうまくいかないように感じます。次の状況で、クラスファイルはどのようにロードされますか?問題はありますか?

  • Java1.6プロジェクトがJava1.7プロジェクトに依存している場合に問題はありますか?1.6 VMは、1.7で生成されたバイトコードの実行を拒否するだけですか、それとも実行するために何か奇妙なことが起こりますか?
  • 逆の場合は問題ありませんか?
4

3 に答える 3

6

java1.6プロジェクトがJava1.7プロジェクトに依存している場合、またはjava1.7プロジェクトがJava1.6プロジェクトに依存している場合は、常に上位バージョンのJVM(この場合はjava 1.7)でプログラムを実行する必要があります。一言で言えば、ほとんどの場合、JavaSE6コンパイラでビルドされたクラスファイルはJavaSE7で正しく実行されます。ただし、いくつかの例外があります。Java6とJava7の間の非互換性のリストについては、JavaSE7とJavaSE6の間の非互換性を参照してください。

于 2013-02-26T05:13:45.550 に答える
1

1.7で生成されたライブラリを含むJDK1.6を使用してプロジェクトをビルドできます。

ただし、プロジェクト1.7のコードの一部にJDK 1.7機能が必要な場合(たとえば、ジェネリックスを備えた新しいSwingコンボボックスを使用する場合)、1.6JVMでは実行されません

したがって、これは非常に注意が必要なことです。コンパイル時の問題(少なくともサイレントではない)だけでなく、実行時の問題も発生する可能性があるためです。あなたがこれを避けることができれば、それはあなたにとってより良いかもしれません。

于 2013-02-26T09:52:29.813 に答える
0

私も同様の問題に直面しており、私の知る限り、1.6 VMは1.7で生成されたバイトコードを実行できるとは思いませんが、1.7は1.6VMのアップグレードバージョンであるため、その逆も可能だと思います。

于 2013-02-26T04:55:19.970 に答える