0

既存の古い Java コード ベースを使用して、1 つのクラスを変更しました。Java 1.5.0 でコード ベースを再コンパイルしました。次に、このコードを Tomcat に正常にデプロイしました。

デプロイをテストするためにアプリケーションにメッセージを送信すると、変更したクラスでエラーが発生しました。

ServletContext リソース [/WEB-INF/ApplicationContext.xml] で定義された「myClass」という名前の Bean のクラス [com.MyClass] のロード中にエラーが発生しました: クラス ファイルまたは依存クラスに問題があります。ネストされた例外は java.lang.UnsupportedClassVersionError: (com/MyClass) オフセット = 6 のメジャー バージョンが正しくありません

デプロイされた Ear と War のマニフェスト ファイルを確認したところ、どちらも 1.5​​.0_22-b03 です。Tomcat インスタンスのバージョンは 1.5.0 です。

このエラーが発生する理由を誰か教えてもらえますか? アプリケーションを実行している JDK は、コードがコンパイルされたバージョンと同じです。

奇妙なことに、エラーのあるクラスは私が修正したクラスだけです。

4

4 に答える 4

1
于 2013-09-11T09:17:10.137 に答える
0

コマンドライン、ant または maven から Java を間接的に実行する可能性が高いため、Java、javac、ビルド スクリプト、およびその中の変数に依存します。Maven は複雑ではありません。Ant では、多くのインクルードがある場合に Java バージョンをエコーできます。

.class ファイルを確認するには、次のことを試してください。これは Java 7 ですが、以前のバージョンに簡単に変換できます。

private static void dumpJavaClassVersion(String path) throws IOException {
    File file = new File(path);
    try (InputStream in = new FileInputStream(file)) {
        byte[] header = new byte[8];
        int nread = in.read(header);
        if (nread != header.length) {
            System.err.printf("Only %d bytes read%n", nread);
            return;
        }
        if (header[0] != (byte)0xCA || header[1] != (byte)0xFE
                || header[2] != (byte)0xBA || header[3] != (byte)0xBE) {
            System.err.printf("Not a .class file (CAFE BABE): %02X%02X %02X%02X",
                    header[0], header[1], header[2], header[3]);
            return;
        }
        int minorVs = ((header[4] & 0xFF) << 8) | (header[5] & 0xFF);
        int majorVs = ((header[4] & 0xFF) << 8) | (header[5] & 0xFF);
        final String[] versionsFrom45 = {"1.1", "1.2", "1.3", "1.4", "5", "6", "7", "8", "9", "10"};
        int majorIx = majorVs - 45;
        String majorRepr = majorIx < 0 || majorIx >= versionsFrom45.length ? "?" : versionsFrom45[majorIx];
        System.out.printf("Version %s, internal: minor %d, major %d%n",
                majorRepr, minorVs, majorVs);

    }
}
于 2013-09-11T09:19:45.897 に答える
0

Java バージョン 6 でコンパイルしたと思います。再確認してください。

于 2013-09-11T08:30:36.187 に答える
0

1.5 よりも新しい Java バージョンでコードをコンパイルしたようです。正しい JRE がインストールされているかどうかを確認する必要があります ( Window-> Preferences-> Java-> Installed JREs)。

Windowまた、コンパイラ準拠レベルが 1.5 ( -> Preferences-> Java-> )に設定されているかどうかも確認する必要がありますCompiler

私はあなたがEclipseを使用していると仮定しています...

于 2013-09-11T08:28:11.630 に答える