Dark

SQL書き方ドリルのSQUATをmacOS Catalinaで動かす

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル」で勉強しようと思い付属のSQUATをMacで起動しようとしたが、本に書いてある通りにstartup.commandstartup.shを実行しても起動できなかった。

OpenJDKで起動すると解決したので備忘録を残しておく。

環境

  • macOS Catalina 10.15.3

以下は、SQUATが動かなかった環境。

  • java 14 2020-03-17
  • Java(TM) SE Runtime Environment (build 14+36-1461)
  • Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

以下は、動いた環境。

  • openjdk 11.0.2 2019-01-15
  • OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
  • OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

動かし方

結論から言うと、こちらの記事(OpenJDK 11 を Homebrew で macOS にインストールする)などを参考にOpenJDKをインストールし、/usr/libexec/java_home -v 11で表示されるパス下にあるjavaの実行ファイルからSQUATを起動する。

$ "$(/usr/libexec/java_home -v 11)/bin/java" -cp data:squat.jar jp.towersquest.squat.Main

生じたエラー

本に書いてある通りにstartup.commandをダブルクリックすると、SQUATは起動するものの「セッション情報をロードしています」で止まってしまった。startup.command内で実行されているコマンドを叩くと、以下のエラーを吐いていた。

$ java -cp data:squat.jar jp.towersquest.squat.Main                   
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.seasar.framework.beans.impl.BeanDescImpl (file:/Users/9sako6/Downloads/squat-1.0.2/squat-1.0.2/squat.jar) to field javax.swing.JSplitPane.uiClassID
WARNING: Please consider reporting this to the maintainers of org.seasar.framework.beans.impl.BeanDescImpl
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.ExceptionInInitializerError
	at org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle.<init>(ToStringStyle.java:2135)
	at org.apache.commons.lang.builder.ToStringStyle.<clinit>(ToStringStyle.java:79)
	at org.apache.commons.lang.builder.ToStringBuilder.<clinit>(ToStringBuilder.java:98)
	at jp.towersquest.squat.dao.User.toString(User.java:33)
	at java.base/java.lang.String.valueOf(String.java:3388)
	at java.base/java.lang.StringBuffer.append(StringBuffer.java:299)
	at jp.towersquest.squat.aop.logging.LoggingUserInformation.invoke(LoggingUserInformation.java:18)
	at jp.towersquest.squat.session.impl.SessionImpl$$EnhancedByS2AOP$$4218500f$$MethodInvocation$$setUser0.proceed(MethodInvocationClassGenerator.java)
	at jp.towersquest.squat.session.impl.SessionImpl$$EnhancedByS2AOP$$4218500f.setUser(SessionImpl$$EnhancedByS2AOP$$4218500f.java)
	at jp.towersquest.squat.application.impl.ApplicationLifecycleImpl.doStartup(ApplicationLifecycleImpl.java:95)
	at jp.towersquest.squat.application.impl.ApplicationLifecycleImpl.startup(ApplicationLifecycleImpl.java:73)
	at jp.towersquest.squat.Application.bootstrap(Application.java:38)
	at jp.towersquest.squat.Main.main(Main.java:8)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
	at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3756)
	at java.base/java.lang.String.substring(String.java:1902)
	at org.apache.commons.lang.SystemUtils.getJavaVersionAsFloat(SystemUtils.java:1122)
	at org.apache.commons.lang.SystemUtils.<clinit>(SystemUtils.java:818)
	... 13 more

原因がわからなかったので、macOS CatalinaでSQUATを起動した前例であるこちらの記事で使われていたOpenJDKで試してみるとうまくいった。

参考

  1. OpenJDK 11 を Homebrew で macOS にインストールする
  2. 「すらすらと手が動くようになる SQL書き方ドリル」の付録にある SQUAT がエラーで起動しない
Share:
記事一覧
Dark