IntelliJ 使い方 ~JARファイルを出力する~

IntelliJでJARファイルを出力する

Javaでプログラムを作成していると、最終的に配布できるようにしたくなるものです。
作ったモノを配布するには、作成物を「起動ファイル」に変換して配布するパターンが多いです。
C/C++などでは「*.exe」ファイルを出力します。このようなダブルクリックで起動できるファイルのことを
実行可能ファイル(Wiki参照)と呼びます。

でわ、Javaの場合はどうでしょうか?主にJARファイル、WARファイル、EARファイルなどがあります。
WARとかEARファイルは、ウェブアプリケーションとして、デプロイ(Tomcatなどのサーバー上に配置)して起動します。

Githubとの連携方法は下の動画を参照ください。

JARファイルは?

JARファイルは、どちらかというとローカル(自分のPC)上で動かすための起動ファイルです。
「java -jar ファイル名(パス付き)」コマンドで実行することができます。

外国のものばかりのサイトですが、このようなアプリがあるようです。

JAR出力

IntelliJでJARの出力をするときは以下のような手順でやるようです。

  1. File -> ProjectStructureを選択

  2. Airtifactsを選択

  3. 「+」ボタンを押下、JAR -> From module with dependenciesを選択

  4. 起動するメインメソッドのあるクラスを指定

  5. 下のように、出力するファイルを一覧できるので、確認、OKボタンを押下

  6. 上部にある「Build」 -> 「Build Artifact」を選択

指定のフォルダにJARファイルが出力されます。

出力したJARを動かす

下のように動画にしました。

コマンド実行

JARファイルをコマンドで動かすのにJavaプログラミングの記事ではあまり見かけませんが、プログラム引数を使用したいと考えています。

よくある使用方法。

  1. 起動するときにオプションを付けて実行する
  2. 実行するときの設定ファイルを変更する

考えればいくらでも出てくるのでこのくらいにしますが、今回は2の「実行するときの設定ファイルを変更する」を実装することを考えたいと思います。

ビルドパスについて

ファイルやクラスを参照するために設定するのが、ビルドパスです。大体はプロジェクトのルートにせってしてあります。
なので、ファイルを参照するときはプロジェクト直下から記述します。
下の図は、作成しているプロジェクトのフォルダです。

ちなみに、IntelliJ IDEAで開くと下のような画面です。

ここからJARファイルを参照したければ「ObjectOrientedPrograming.jar」と書いてやれば参照できます。
具体的には、下のようなコードです。

File jarFile = Files.newBufferedReader(Paths.get("ObjectOrientedPrograming.jar"));

では、上のプロジェクトのようなフォルダ構成の場合、resourcesフォルダ内の「SampleRpg_story.txt」を参照したいとしましょう。この場合は、「resources/SampleRpg_story.txt」を参照すればよいです。
プログラムで書くと下のようになります。

File jarFile = Files.newBufferedReader(Paths.get("resources", "SampleRpg_story.txt"));

この場合は、フォルダを第一引数("resources")フォルダを指定します。同様にSample_story.txtを参照します。

ちょっとわかりずらいので、下の図に示します。

これを参照するときは、「src/main/resources/Sample_story.txt」とパスを指定してやればOKです。
プログラムで書くと下のようになります。

File jarFile = Files.newBufferedReader(Paths.get("src/main/resources", "SampleRpg_story.txt"));

初めの問題

JARファイルで起動したときに、パスの指定がどのようになるのか?というところを
明確にしたいというところです。

ためにしにJARファイルを作成して実行してみたところ。。。
JARファイルのある場所から普通にファイルの参照ができました。つまりJARファイルのある場所からパスを指定してやれば、対象のファイルを参照できるということがわかりました。

具体的には、下のようなコードです。

    public static void main(String[] args) {
        System.out.println("Param: " + args[0]);
        BufferedReader buf = null;
        try {
            if (args.length != 0) {
                buf = Files.newBufferedReader(Paths.get(args[0]));
            }
            RpgLogic gameLogic = new TextRpgLogic();
            TextRpgGameEngine engine  = new TextRpgGameEngine(gameLogic);

            engine.start();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("想定外のエラーで終了します。:" + e.getMessage());
            System.exit(-1);
        }
    }

実行結果はこちらです。

InttelliJ 使い方 ~リファクタリング~

クラス移動リファクタリング

早い話しが、増えてきたクラスを移動して整理したいときに役に立ちます。

参考サイトはIntteliJのリファレンスページです。

クラス移動のやり方

  1. 移動対象のクラスを右クリック
  2. 移動先のパッケージを指定する
  3. 「Refactor」をクリック

メソッド名の変更方法

メソッドの名前を変更したいとき、すでに実装済みだと、その影響範囲をすべて変更しなくてはいけません。
<例>

  <変更前>            <変更後>
RpgConst.sceneType ->       RpgConst.type
<呼び出し側:変更前>      <呼び出し側:変更後>
RpgConst.getSceneType();  RpgConst.getType();

参考サイトはIntelliJのドキュメントです。
実際に、やってみるときは以下の手順を踏みます。
変更対象のメソッドを指定します。

指定して変更した後にTabキーを押下します。

InttelliJ 使い方 ~JavaDocを出力する~

javaDocの出力

参考サイトはJetBrainのサイトです。

現在作成しているテキストRPGのクラスが増えてきたので、そろそろとJavaDocを出力してドキュメントなどにまとめておこうと考えました。

JavaDoc出力手順

参考サイトの手順委従い、進めていくと下のように、エラーが出ました。

文字コード(エンコード)指定が間違っているようです。

警告

no summary or caption for table

このような警告がありました。

/**
 * プレーヤーを表現するクラス。
 * 名前の最大文字数は6文字<br>
 * <table>
 * <tr><td>共通項目</td><td>意味</td></tr>
 * <tr><td>攻撃力</td><td>現在装備している武器力 + 対象の射程攻撃力(ステータス)</td></tr>
 * <tr><td>防御力</td><td>現在装備している防具力 + 防御力(ステータス)</td></tr>
 * <tr><td>武器</td><td>メインとサブがあり、アビリティにより使用方法法が異なる</td></tr>
 * <tr><td>防具</td><td>防具、着脱は、Map画面でのみ可能</td></tr>
 * </table>
 * @author 実装者の名前
 */

テーブルにsummary="XXX"をつか白という意味らしいです。

JavaDocでのエスケープ文字

「\(バックスラッシュ)」を使うようです。

実行結果

警告が多少ありましたが、後々に直す方向で。。。

出力した結果はGitにアップしてあります。

Github Page

Githubのドキュメントを参考に作成しました。
対象になるリポジトリのルートに「docs」フォルダを作成しそこにHTMLを配置する形でないとうまく動かないようです。
自分の作成した方法は以下のようになります。

  1. IntelliJでJavaDocを出力する
  2. 出力するフォルダ、プロジェクト直下(ルート)に「docs」を作成
  3. それをPUSHする。

IntelliJ IDEA Maven リポジトリからロードできない

Mavenでソースをロードできない

IntelliJ IDEAを使用してpom.xmlにMavenリポジトリからソースをロードしようとすると下のような文言が出てロードできない事象にあいました。

依存関係 'com.ibm.icu:icu4j:2.9.1' が見つかりません

これは、間違っているので、エラーになっているのですが。正しくは、下のような形でpom.xmlを書きます。

<dependencies>
    <dependency>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
        <version>2.6.1</version>
    </dependency>
</dependencies>

これでロードできるはずなのですが、出来ない。。。
こちらのページを参考にすると、「Mavenの更新ができていないから」ということでした。
下のような操作を行います。

  1. プロジェクトを右クリック
  2. Mavenを選択
  3. プロジェクトの再ロード

これで、ソース(JARなど)をロードすることができます。

でわでわ。。。

IntelliJ IDEA create GIT〜IntelliJでGITへプッシュ〜

イントロダクション

IntelliJ IDEAで作成したプロジェクトをGITへ登録する手順です。

Introduction

How to push own project in IntelliJ to GIT.

手順(How to)

(1)ローカルリポジトリの作成(Create local Repository on pc)

1.プロジェクトを開く(Open your project)

2.メインメニューからVCS→Version Control Integrationを選択する(select VCN → Version Control Integration)

3.Gitを選択する(select "Git")

4.コマンドボタン+9(⌘9)を押下→「Unversioned Files」を右クリック→ローカルリポジトリにファイルを追加する (push (⌘9) →right click on "Unversioned Files" → Add files to Git repository

※メニューからも開けます(you can find from menu)

  1. Open the project that you want to put under Git.
  2. From the main menu, choose VCS | Enable Version Control Integration.
  3. In the dialog that opens, select Git from the drop-down list and click OK.
  4. push (⌘9) → right click "Unversioned Files" and Add files to local repository.

(2) Gitリポジトリ(リモートリポジトリ)にプッシュする

1.登録するリモートリポジトリを作成する

Git Hubなどでリポジトリを作成する

2.メインメニューから「VCS」をクリックす

2.プロジェクトの設定を開く

3.接続するGitリポジトリのURLを設定する

4.コミットとプッシュを行う

5.途中でURLを聞かれるので作成したGitリポジトリのURLを指定する

6.登録できた事を確認する

ちなみに自分の作成したGitリポジトリはこちらです。