

Javaをvscode,mavenを使った環境開発をしていますが，pom.xmlのdependencyに

[code]

        <dependency>
            <groupId>io.jenetics</groupId>
            <artifactId>jenetics</artifactId>
            <version>7.0.0</version>
        </dependency>
    
[/code]

のようにライブラリを追加しコンパイルしたところ，以下のエラーが出ました．

[code]

    [ERROR] /c:/Users/・・・・/demo/src/main/javamaven-3.8.5\repository\io\jenetics\jenetics\7.0.0\jenetics-7.0.0.jar(io /jenetics/BitChromosome.class)は不正です                               
    [ERROR]     クラス・ファイルのバージョン61.0は不正です。52.0である必要があります                                                             
    [ERROR]     削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
    
[/code]

クラス・ファイルのバージョンが何を指していて，何をしたらコンパイルできるのが分かりません．  
import文を消したらコンパイルできたので，ライブラリのバージョンに問題があるのではないかと思っていますが，よくわかっていません．  
原因と対処を教えていただけますでしょうか．


CC BY-SA 4.0
2022-04-23T08:13:16.127
88464
2022-12-14T13:08:31.087
2022-04-23T11:47:02.370
3060
52332
question
java maven compiler
ローカルリポジトリのクラス・ファイルのバージョンが不正であると表示され，コンパイルできない


"クラス・ファイルのバージョン" というのは、どのバージョンのJVMを対象にコンパイルされたものかを表しています。

クラスファイルバージョンと Java
バージョンの対応関係は[仕様書](https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-4.html#jvms-4.1-200-B.2)にあります。

そのエラーメッセージは、利用しようとしているライブラリ `jenetics` は Java17 をターゲットにビルドされているが、あなたは Java8
をターゲットにビルドしようとしている(典型的には JDK8 を利用している)ために出力されています。

対応の選択肢としては、以下の2つになろうかと思います。

  * Java8 に対応した `jenetics` を利用する 
    * [`v5.2.0`](https://github.com/jenetics/jenetics/tree/v5.2.0#build-time) が Java8 対応の最終版のようです
  * JDK17(以降)を用いてビルドする

前者の対応を採る場合は、質問文中に表れているバージョン番号を書き換えればよいでしょう。

[code]

        <dependency>
            <groupId>io.jenetics</groupId>
            <artifactId>jenetics</artifactId>
            <version>5.2.0</version>
        </dependency>
    
[/code]

後者の対応を採る場合は、 JDK17(あるいはJDK18)をセットアップした上で、 [`maven-compiler-plugin`
のオプション](https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-
compiler-source-and-target.html) で、ターゲットを Java17(あるいは18) に指定します。

[code]

      <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
      </properties>
    
[/code]


CC BY-SA 4.0
2022-04-23T22:26:41.667
88469
2022-04-24T01:21:14.957
2022-04-24T01:21:14.957
2808
2808
88464
answer