スリ飯屋MaLankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【Ruby on Jets】dynamodb-localを実行した時に、javaのバージョンが古くてエラー発生。Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/logging/log4j/spi/ExtendedLogger : Unsupported major.minor version 52.0

【Ruby on Jets】  dynamodb-localを実行した時に、 javaのバージョンが古くて エラー発生


こんにちは、mahです。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、

  • Ruby on Jetsで、dynamodb-localを実行した時に、javaのバージョンが古くて発生したエラー

についてです。


AWS Lambdaに手軽にアプリをデプロイ出来るFW、

Ruby on Jetsを使っています。


Railsのように扱えるので、自分的にはすごく使いやすいです。


下記の記事を参考に、

dynamodbを立ち上げようとしたのですが、

javaのバージョンが古くてエラーになったので、

その対処法を記しておきます。

【Ruby on Jets】dynamodb-localを実行した時に、javaのバージョンが古くてエラー発生。Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/logging/log4j/spi/ExtendedLogger : Unsupported major.minor version 52.0




起きたこと


$ dynamodb-local を実行すると、

下記のようなエラーが出ました。


290  jets-lambda   master *  $ dynamodb-local
Initializing DynamoDB Local with the following configuration:
Port:    8000
InMemory:    false
DbPath:    null
SharedDb:    false
shouldDelayTransientStatuses:    false
CorsParams:    *
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/logging/log4j/spi/ExtendedLogger : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at com.amazonaws.services.dynamodbv2.local.shared.logging.LogManager.<clinit>(LogManager.java:28)
    at com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer.<clinit>(DynamoDBProxyServer.java:36)
    at com.amazonaws.services.dynamodbv2.local.main.ServerRunner.createServer(ServerRunner.java:120)
    at com.amazonaws.services.dynamodbv2.local.main.ServerRunner.createServerFromCommandLineArgs(ServerRunner.java:116)
    at com.amazonaws.services.dynamodbv2.local.main.ServerRunner.main(ServerRunner.java:71)


原因


調べると、javaのバージョンが関係してそう。

java - AWS dynamoDB quick start not working - Unsupported major.minor version 51.0 - Stack Overflow


対処法


javaのバージョンを上げれば解決しそう。


手順


こちらの記事を参考に、

javaのバージョンを確認。

295  jets-lambda   master *  $ javac -version
javac 1.6.0_65

296  jets-lambda   master *  $ java -version

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)


バージョンは1.6.0_65。

記事の手順通り、下記のコマンド実行。

$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk8


再度バージョン確認。

$ java -version

openjdk version "1.8.0_212"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)


1.8.0_212に上がっていることを確認しました。


もう一度dynamodb-localを実行します。

$ dynamodb-local
Initializing DynamoDB Local with the following configuration:
Port:    8000
InMemory:    false
DbPath:    null
SharedDb:    false
shouldDelayTransientStatuses:    false
CorsParams:    *


エラーが無く、

ローカル環境でdynamodbが立ち上がることを確認しました。