Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

PlantUML の Illegal reflective access 問題

はじめに

近ごろ PlantUML で記述されたテキストに遭遇することが増えてきました。メインのテキストエディタとなりつつある VSCodePlantUML extension をインストールしてみたところ、、

プレビュー(Alt-D)の際に WARNING メッセージが!

f:id:jspnet:20200413130502p:plain

ダイアグラムは正しく表示されているようですが気に障るので直します。

調査

雰囲気からしJava のメッセージっぽい。Java 詳しくないのでググってみると、まったく同じ issue が PlantUML の フォーラム にありました。

Illegal reflective access by net.sourceforge.plantuml.svg.SvgGraphics - PlantUML Q&A

原因は SvgGraphics が internal JRE class を直接使用していてこれがお作法に反するらしい。さらにこの検出は Java 9(with Project Jigsaw)によって可能になったもので、それより前の Java Runtimes では検出していなかったと。

自分の環境を調べてみると OpenJDK 13 がインストールされていました。

 % java -version
openjdk version "13" 2019-09-17
OpenJDK Runtime Environment (build 13+33-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 13+33-Ubuntu-1, mixed mode)

ということは Java 8 を別途インストールし、Java 8 の上で動かせば回避?できるかも。さっそく試してみます。

Java 8 で回避

まずは、Java 8 のインストール。以下より所望のアーカイブを取得します。ちなみに自分の環境は Ubuntu x64 なので、これベースで解説します。

Download Free Java Software

OpenJDK 13 の環境を汚したくないので、Java 8 はユーザローカルな環境に配置します。

 % mkdir $HOME/java
 % mv jre-8u241-linux-x64.tar.gz $HOME/java
 % cd $HOME/java
 % tar zxvf jre-8u241-linux-x64.tar.gz
 % ./jre1.8.0_241/bin/java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

次に PlantUML extension の設定を変更し、インストールした Java 8 を使用するようにします。

  1. VSCodeSettings を開く(Ctrl-,
  2. 検索欄に "plantuml.java" と入力する
  3. Plantuml: Java が現れるので上記でインストールした bin/java へのフルパスをセットする

f:id:jspnet:20200413130601p:plain

こんな感じ。んでプレビューを再表示すると、

f:id:jspnet:20200413130619p:plain

WARNING が消えています。やったね!

β 版で回避

先ほどの Q&A を読み進めてみると、この問題を対処した β 版が answer として post されていました。こちらの方法も試してみます。answer に書かれたの URL より jar ファイルをダウンロードします。

http://beta.plantuml.net/plantuml.jar

今度はカスタマイズされた plantuml.jar を使用するように PlantUML extension の設定を変更します。

  1. VSCodeSettings を開く(Ctrl-,
  2. 検索欄に "plantuml.jar" と入力する
  3. Plantuml: Jar の設定欄が現れるのでダウンロードした jar ファイルへのフルパスをセットする
  4. 確認のため、先ほどの Plantuml: Jar は空欄に戻す

f:id:jspnet:20200413130653p:plain

先ほど同様に WARNING が消えていることを確認できました。

おわりに

β 版が公開されている以上、正式なリリースに上記の修正は含まれるのだと思います。β 版でお茶を濁したいけど、正式版がリリースされたときに入れ替えるの忘れそう、、