こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。
このブログでは、
僕が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が立ち上がることを確認しました。