Jenkinsを動かしているマシンのほとんどがディスプレイに繋がっていないと思います。
私の管理するJenkins環境もDockerで動いているので、GUIは表示されません。
そんな環境にIntelliJ IDEAをセットアップし、Inspectionを実行しなくてはいけなくなったので、手順をまとめてみます。
JDKのインストール
Oracleの公式でLinux用のJDKをダウンロードし、任意のディレクトリに解凍します。
/usr/java/とかが無難かと思います。
JDKへパスを通す
ググれば腐る程出てくる情報だとは思いますが、.bashrcあたりに以下を書き込めばパスは通ります。
ついでなので、JAVA_HOMEも設定しておくと良いかもしれません。
export JAVA_HOME=/usr/java/JDKのディレクトリ
export PATH=$JAVA_HOME/bin:$PATH
IntelliJ IDEAをインストール
ダウンロードし、任意のディレクトリに解凍します。
コミュニティ版で問題ありません。
IntelliJ IDEAにJDKの設定をする
GUIがあれば、簡単に設定できますが、CUI環境ですとここが鬼門となります。
以下のファイルにJDKの設定を書き込みます。
以下のように書き込みます。(JDKのパスは各自で設定してください。)
<?xml version="1.0" encoding="UTF-8"?>
<application>
<component name="ProjectJdkTable">
<jdk version="2">
<name value="1.8" />
<type value="JavaSDK" />
<version value="java version "1.8.0_161"" />
<homePath value="/usr/java/jdk1.8.0_161" />
<roots>
<annotationsPath>
<root type="composite">
<root type="simple" url="jar://$APPLICATION_HOME_DIR$/lib/jdkAnnotations.jar!/" />
</root>
</annotationsPath>
<root type="composite">
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/charsets.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/deploy.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/cldrdata.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/dnsns.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/jaccess.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/jfxrt.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/localedata.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/nashorn.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/sunec.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/sunjce_provider.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/sunpkcs11.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/ext/zipfs.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/javaws.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/jce.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/jfr.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/jfxswt.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/jsse.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/management-agent.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/plugin.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/resources.jar!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/jre/lib/rt.jar!/" />
</root>
</classPath>
<javadocPath>
<root type="composite" />
</javadocPath>
<sourcePath>
<root type="composite">
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/src.zip!/" />
<root type="simple" url="jar:///usr/java/jdk1.8.0_161/javafx-src.zip!/" />
</root>
</sourcePath>
</roots>
<additional />
</jdk>
</component>
</application>
Inspectionを動かしてみる
今回CUIしかない環境でIntelliJ IDEAを構築する目的は、InspectionをCUI上で実行することなので、実行してみます。
<IDE_HOME>/bin/inspect.sh ~/MyProject ~/MyProject/.idea/inspectionProfiles/Project_Default.xml ~/MyProject/inspection-results-dir -v2 -d ~/MyProject/src/main
解析することができました!
所感
IDEなので、CUIのみでの運用は想定されておらず、JDKの設定にも一苦労した。
IntelliJ IDEAのInspectionはかなり強力な解析をしてくれるので、Jenkinsのような環境で実行したい!というパターンは増えてくるのではないだろうか。
最初は動かない動かないと困っていたら、公式の「Inspectionをコマンドラインから実施する」やり方のページに以下の記載があった。
Note that if SDK is not defined, the inspection will fail. The SDK descriptions should be stored in config\options\jdk.table.xml. Learn how to configure SDK here.
簡単に言えば、「SDK設定できてないと解析できないぞ」とのことでした。
英語めんどくさい病なので、公式ドキュメントも読んでいなかったせいで、かなり時間を食われました。反省・・・。