CUIのみの環境でIntelliJ IDEA Inspectionを使う方法

f:id:shikanikusausage:20190416224755p:plain

Jenkinsを動かしているマシンのほとんどがディスプレイに繋がっていないと思います。

私の管理するJenkins環境もDockerで動いているので、GUIは表示されません。

そんな環境にIntelliJ IDEAをセットアップし、Inspectionを実行しなくてはいけなくなったので、手順をまとめてみます。

JDKのインストール

IntelliJ IDEAを動かすためにJDKが必要です。

www.oracle.com

Oracleの公式でLinux用のJDKをダウンロードし、任意のディレクトリに解凍します。

/usr/java/とかが無難かと思います。

 

JDKへパスを通す

ググれば腐る程出てくる情報だとは思いますが、.bashrcあたりに以下を書き込めばパスは通ります。

ついでなので、JAVA_HOMEも設定しておくと良いかもしれません。

export JAVA_HOME=/usr/java/JDKディレクト

export PATH=$JAVA_HOME/bin:$PATH

 

IntelliJ IDEAをインストール

ダウンロードし、任意のディレクトリに解凍します。

コミュニティ版で問題ありません。

www.jetbrains.com

 

IntelliJ IDEAにJDKの設定をする

GUIがあれば、簡単に設定できますが、CUI環境ですとここが鬼門となります。

以下のファイルにJDKの設定を書き込みます。

/.IdeaIC2018.3/config/options/jdk.table.xml

以下のように書き込みます。(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 &quot;1.8.0_161&quot;" />

      <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>

        <classPath>

          <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設定できてないと解析できないぞ」とのことでした。

英語めんどくさい病なので、公式ドキュメントも読んでいなかったせいで、かなり時間を食われました。反省・・・。

www.jetbrains.com

Copyright (C) 2018-2022 akagoma. All Rights Reserved.