Eclipse/Pleiadesでの開発

概要

これまでは、原理の原点に立ち返るため、
手動にてコンソールコマンドを利用してJavaソースコードをコンパイルし、
手動にてjarファイルなども作成しました。
しかし、実作業において、そのようなことをすることはほとんど考えられません。

Eclipse/Pleiadesを利用して、
実際の開発手順をなぞってみましょう。

プロジェクトの作成

プロジェクトを作成してみましょう。

PICTURE

「完了」ではなくて「次へ」を押す

プロジェクト名自体はなんでもかいいませんが、「完了」を押さず、
「次へ」を押してください

PICTURE

「ライブラリー」として「hmJavaVM.jar」を追加

ここで「ライブラリー」というタブがありますので、
秀丸のディレクトリにセッティングしておいた「hmJavaVM.jar」を選択しましょう。

PICTURE

PICTURE

PICTURE

Javaのクラスを作成してみる

「パッケージ・エクスプローラー」のペイン上で、「src」を選択し、
右クリックして、「新規」→「クラス」を選択し、新たなクラスを作成しましょう。

PICTURE

PICTURE

PICTURE

入力補完が働く

プログラミングの統合環境ですので、入力中は秀丸とは比べ物にならない
正確なインテリセンスが働くようになります。

ソースを入力してみる

コピペしてしまうのではなく、入力してみてください。
どのように入力補完が働くのか体感できます。

PICTURE

一番最初の、「import hidemaru.*」のところは、
ファイルを保存した瞬間に、Eclipseが自動的に「import hidemaru.Hm」へと書き換えるかもしれません。

MyTest.java
import hidemaru.*;

public class MyClass2 {

    // この変数はマクロが終了しても、残る
    static int staticCounter = 0;

    public static long begin() {
        // 現在の実行中のマクロファイルが存在するディレクトリ名を得る
        String currentmacrodirectory = (String)Hm.Macro.getVar("currentmacrodirectory");
        Hm.debugInfo(currentmacrodirectory);

        // 秀丸が提供する今日の年月日曜日
        String date = (String)Hm.Macro.getVar("date");
        Hm.debugInfo(date);

        // 秀丸エディタ上の編集中テキストの現在の内容すべて
        String text = Hm.Edit.getTotalText();
        Hm.Edit.setTotalText("編集中テキストの内容をこの文字列に変更");

        // スタティックな値
        Hm.debugInfo("スタティックカウンタ:", staticCounter++);

        return 1;
    }
}

保存時に自動的に「.class」ファイルが作られる。

ファイルを保存した瞬間に、自動的にコンパイルされ、
コンパイルに成功したら、「.class」ファイルが作られます。

javacを使った手動によるコンパイルは必要ありません。

出来上がったクラスをマクロから呼んで実行してみる

出来上がった「MyClass2.class」をマクロから呼んでみましょう

MyFirstTest.mac
#JVM = loaddll( hidemarudir + @"\hmJavaVM.dll");

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "begin");
  
freedll( #JVM );

PICTURE

PICTURE

PICTURE

そのまま同じマクロをすかさず実行してみると、
実行する度に、カウントが上がっていくのがわかります。

PICTURE

これは秀丸のマクロの実行が終了しても、JVMは生きており、
クラス定義も生きているため、処理が継続されているということです

このことはとても重要な性質となりますので念頭においておいてください。

プログラムを組む際に、「初期化」と「終了」をプログラムの中でしておく必要がある
ということです。

マクロの実行が終わったから、Javaのクラス定義や変数も全て破棄される、といったわけではありません。
「マクロを実行した該当の秀丸プロセス」を閉じると、初めて該当プロセスのJVMが破棄されます。

わかりやすく言うと、下のように秀丸で3つのファイルを開いているとして、
「a.mac」を開いた状態で、マクロを実行したとすると、この「a.mac」のタブに対応するプロセスにJVMが割り当てられます。
ですので、この「a.mac」タブウィンドウを「閉じる」と、JVMも破棄される、ということになります。

PICTURE

パッケージを作成してみる

上のファイルをパッケージ版に変更してみましょう。

メニューよりパッケージを作成するにしてみます。
パッケージの名前はなんでもかませいません。

PICTURE

PICTURE

MyClass2.javaをパッケージmyPacTestへと移動してみる

パッケージ・エクスプローラー上で、MyClass2.javaをmyPackTestの下へとマウスで「ズズズーっ」と
移動させます。

すると、移動しをえると、ソースが編集され、先頭に「package myPackTest;」の行が自動で追加されるはずです。

PICTURE

この状態でも、ファイルを保存する度に、クラスファイルが出来上がります。
(パッケージの位置関係も考慮された.class)

.jarの作成

パッケージを.jarファイルにしてみましょう。

パッケージエクスプローラー上の「myPackTest」のパッケージ上で右クリックをして、
エクスポートをします。

PICTURE

.jarファイルの名前を適当に指定しましょう。
hmJavaVMでは、実行するマクロと同じディレクトリにある「.jar」は、
全て自動でクラス探索の対象となるため、.jarの名前は適当でかいません。

PICTURE

PICTURE

マクロの編集と実行

出来上がった、「.jar」ファイルを、実行するマクロと同じディレクトリに入れましょう。

PICTURE

マクロ(.mac)の方もパッケージに入った分、次のような修正が必要となるでしょう。
.jarのファイル名の指定は不要です。
それは、hmJavaVMが自動で読み込みます。
指定するのは、「パッケージ名」を付けることだけです。

MyFirstTest.mac
#JVM = loaddll( hidemarudir + @"\hmJavaVM.dll");

#_ = dllfuncw( #JVM, "CallMethod", "myPacTest.MyClass2", "begin");
  
freedll( #JVM );

PICTURE