LoginSignup
3
2

More than 1 year has passed since last update.

JOSMプラグイン開発環境を整備する

Last updated at Posted at 2021-02-26

JOSMプラグイン開発環境を整備する

OSMのエディタとして古くから利用されているJOSMにはJOSMの機能を強化するJOSMプラグインというものがある

JOSMプラグインの開発方法は「https://josm.openstreetmap.de/wiki/DevelopersGuide/DevelopingPlugins」に記載されています。
以上

なのだが、JOSMの「JOSMプラグイン開発ガイド」では「テンプレートを示すからこれで開発できるだろ」的な書き方になっているので、私には敷居が高すぎて手に負えなかった

2017年12月に 救世主現る。 maripoさまの「JOSMのプラグイン作ろうぜ」が発表された。これでやっと「ひょっとしたら俺でもできるんじゃね?」って気分になってきた。

だがしかし、気分だけではどうにもならず、肝心のプログラミングを開始する前の開発環境の準備段階で「DevelopingPlugins」にてこづらされた。

  • 英語で書かれてる
  • のっけから svn でつまづく
  • antが懐かしすぎる
  • 結局 JOSMプラグインのプロジェクトはどこにつくるの?
  • 日本語化したいけどどうすればいいの?

と、JOSMプラグイン開発に着手するまでの手順が難しすぎる。(週末プログラマーの私は2ヶ月かかった)

ということで これからJOSMプラグイン開発を始めようとする人や、開発再開する人に向けて、同じような苦労をせずにグログラミングを開始できるように JOSMプラグインの開発環境を整備する手順を示す

事前準備

作業に取り掛かる前に下ごしらえ

  • 開発マシンのOSは 「Linux mint 19 (Ubuntu 18.04 bionic)」を使っている

    JOSMに限らず、OSMの世界はLinuxが標準だ、同じUNIX系の MacOS でも問題はないが、Windowsでの開発はおすすめしない

  • プロジェクトはホームディレクトリの下に「workspace」が作成されているものとして説明する。「workspace」が作成されていない場合には作っておいてくれ。

    • $ mkdir ~/workspace
  • Javaのインストール (JOSMjavaで書かれている)

    • インストール OpenJDK 1.8 : JOSMは java 1.8以降で動作するように作らないといけないから、
    • インストール OpenJDK 11 JOSMプラグインの部分は java 11 でないとコンパイルできないものが混じっているので... > OpenJDK 1.8OpenJDK 11の両方ともインストールしてくれ
  • IDEには Eclipse を使うぞ

    • eclipse IDE
    • 「Eclipse」は各自でインストールしておいてくれ

わたしはJOSMプラグインをいじるために、10年以上愛用してきた netbeans から eclipse に転んだ...

  • その他、下記もインストールしておいてくれ
    • svn
    • # apt install svn ← 確かこんな感じ、svnクライアントだけでOK
    • git
    • # apt install git

1. ベースJOSMを準備する

まずはじめに、JOSMプラグインが動作する「ベースJOSM」をビルドする。

dev1_001.png

まずは、JOSMプラグインが動作する基礎部分をつくる。

JOSMのバイナリじゃだめなんだ。ソースからビルドするよ

(1) ベースJOSMのソース取得

JOSMのソースを取得する。JOSMのソースはsvn(Subversion)で配信されている

svnの知識は必要ない、下記のコマンドをそのまま実行するだけ

$ cd ~/workspace

$ svn co https://josm.openstreetmap.de/osmsvn/applications/editors/josm
  • フォルダ~/workspace/josm が作成される。

(2) JOSM更新

すでにJOSMのコードを取得済みの場合は最新のコードにアップデートする

$ cd ~/workspace/josm

$ svn update

(3) JOSMのビルド

ここで取得したJOSMをIDEを使わずにコマンドラインから手動でビルドする

(3-1) Javaのバージョンを JDK1.8 に切り替える

JOSMはJava 1.8以降に対応させなければならないので java1.8でコンパイルする

  • sudo update-alternatives --config java
  • sudo update-alternatives --config javac
  Selection    Path                                                     Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java               1111      manual mode
* 1            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java            1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1

(3-2) Josm/coreをビルドする

$ cd ~/workspace/josm/core

$ ant
 :
BUILD SUCCESSFUL
Total time: 14 seconds

BUILD SUCCESSFULが表示されれば成功だ

(4) Eclipseによる JOSMビルド

ベースとなるJOSMをビルドしたら Eclipseでもビルドできるようにする

JOSMの公式Wikiには「Eclipse」での開発方法が記載されているので、ここでも素直に「Eclipse」を使う

Eclipseを起動する前に Javaのバージョンを'Java 11'に戻す

  • sudo update-alternatives --config java
  • sudo update-alternatives --config javac
  Selection    Path                                                  Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac           1111      manual mode
  1            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac            1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 0
  • Eclipse IDE 2020-12
    • Eclipseを起動する

(4-1) [JOSM]プロジェクトの作成

  • ~/workspace/jsom/core/build.xml」 を antプロジェクトとしてインポートする
    step1_006.png

    • Eclipse メニュー → [File(F)] → [新規(N)] → [その他(O)...]
    • 'ウィザードを選択'
      step1_007.png
    • [Java Project from Existing Ant Buildfile / 既存 Ant ビルドファイルからの Java プロジェクト]
    • [次へ(N) >]
    • 'Ant ビルドファイルからの Java プロジェクト作成'
      step1_008.png
    • 'Antビルドファイル(A)': [~/workspace/josm/core/build.xml]
    • 'プロジェクトの定義に使用するJavac宣言を選択(S)': [< >ターゲット"compile"に"javac"タスクが見つかりました]
    • [完了(F)]
    • 'プロジェクト作成でエラーが発生しました'
      step1_009err.png
    • エラー[Reference runtime.path not found.]が発生するが、後ほど対処するので無視して先に進める
    • [OK]

プロジェクト[JOSM]が作成される
step1_010.png

(4-2) [JOSM]プロジェクトの設定変更

作成されたプロジェクト[josm]の設定を手作業で修正していく

  • プロジェクト[josm]を右クリック → [properties / プロパティ(R)]
    • 'Resource':
    • 'ロケーション': [~/workspace/josm]
    • 'ビルダー': [新規 antビルダー]
    • [構成の編集]
      • タブ[メイン]
        step1_012main.png
      • 'Ant buildfile / ビルドファイル(L)': [${workspace_loc:/josm/core/build.xml}]
      • [適用(Y)]
      • タブ[JRE]
        step1_012jre.png
      • 'Runtime JRE / ランタイムJRE':
        • 別のJRE(P): [java-8-openjdk-amd64]
      • [適用(Y)]
    • 'Java Build Path / Javaのビルドパス'
    • 'Libraries / ライブラリー(L)'
      step1_013lib.png
      • 'JARの追加(J)...':  [josm/core/dist/josm-custom.jar]
      • 'ライブラリの追加(l)...': [JRE System Library [java-11-openjdk-amd64]]
      • 'ライブラリの追加(l)...': [JUnit5]
      • [適用(A)]
    • Java コンパイラー
      step1_013cmp.png
    • 'プロジェクト固有の設定を可能にする': [ON]
    • 'コンパイラー準拠レベル': [1.8]
    • 'デフォルトの準拠設定の使用': [OFF]
      • '生成された .class ファイルの互換性': [1.8]
      • 'ソースの互換性': [1.8]
    • [適用(A)]

(4-3) [JOSM]プロジェクトのビルド

  • プロジェクト「josm」の「build.xml」を右クリック → [実行(R)]

JOSM_wiki_001.png

(5) Eclipseから「JOSM」を起動する

josm」のビルドに成功したら、Eclipseから「josm」を起動してみる

  • プロジェクト「JOSM」を右クリック → 「実行(R)」 → 「Javaアプリケーション
    dev1_004.png

  • MainApplication - org.openstreetmap.josm.gui」を選択
    dev1_005.png

  • 初回は、JOSMが起動するまでケッコウ時間がかかります。(1分ぐらい)

dev1_002.png

2. JOSMプラグインの開発環境を整備する

ここからは「JOSMプラグイン」を「デバッグモード」で実行できるように環境整備していく

dev2_001.png

(1) 既存JOSMプラグインの取得[easypresets]プロジェクトの作成

いきなりJOSMのプラグインの開発を開始するのはハードルが高いので、まづは既存のプリセットを動かしてみる

ここでは、maripoさまの「EasyPresets」をサンプルに使わせてもらう

(1-1) プラグインのソースコードを取得する

dev2_git.png

githubにある「EasyPresets」を取得する

下記コマンドを打つべし

$ cd ~/workspace/josm/plugins

$ git clone https://github.com/maripo/JOSM_easypresets.git easypresets
  • 「プロジェクトjosm」の「フォルダplugins」に「フォルダeasypresets」が作成される

    $ ll ~/workspace/josm/plugins/easypresets
        合計 124
        drwxr-xr-x   8 hayashi hayashi  4096  2月 21 11:50 .git/
        -rwxr-xr-x   1 hayashi hayashi   114  2月 21 11:50 .gitignore*
        -rwxr-xr-x   1 hayashi hayashi 18092  2月 21 11:50 GPL-v2.0.txt*
        -rwxr-xr-x   1 hayashi hayashi 35147  2月 21 11:50 GPL-v3.0.txt*
        -rwxr-xr-x   1 hayashi hayashi   289  2月 21 11:50 README*
        -rwxr-xr-x   1 hayashi hayashi  4391  2月 21 11:50 README-ja.md*
        -rwxr-xr-x   1 hayashi hayashi  2717  2月 21 11:50 README.md*
        -rwxr-xr-x   1 hayashi hayashi  1463  2月 21 11:50 build.xml*
        drwxr-xr-x   2 hayashi hayashi  4096  2月 21 11:50 data/
        drwxr-xr-x   3 hayashi hayashi  4096  2月 21 11:50 doc/
        drwxr-xr-x   2 hayashi hayashi  4096  2月 21 11:50 i18n/
        -rwxr-xr-x   1 hayashi hayashi   109  2月 21 11:50 i18n_deploy.sh*
        -rwxr-xr-x   1 hayashi hayashi   351  2月 21 11:50 i18n_start.sh*
        drwxr-xr-x   2 hayashi hayashi  4096  2月 21 11:50 images/
        drwxr-xr-x   3 hayashi hayashi  4096  2月 21 11:50 src/
        drwxr-xr-x   4 hayashi hayashi  4096  2月 21 11:50 test/
    

(1-2) プロジェクト[easypresets]のインポート

'github'から取得した「フォルダeasypresets」を'Eclipse IDE'のプロジェクトとして登録する

  • 'Eclipse' → 「ファイル...」 → [ファイルシステムからプロジェクトを開く...]
    step2_002.png
    • インポートソース: [/home/(user)/workspace/josm/plugins/easypresets]
    • [完了(F)]

「プロジェクトjosm」の中に「プロジェクトeasypresets」が入れ子になって作成される
step2_003.png

  • 'Eclipse' → 「プロジェクトjosm/plugins/easypresets」を右クリック → [プロパティ(R)...]

    • 'Resource / リソース'
      step2_004.png
    • 'パス(P)': [/easypresets]
    • 'ロケーション(L)': [/home/(user)/workspace/josm/plugins/easypresets]
    • [適用(A)]
    • 'ビルダー': [新規 antビルダー]
      step2_005.png
    • [構成の編集]
      • タブ[メイン]
        step2_005main.png
      • '名前(N)': [Ant ビルダー]
      • 'Ant buildfile / ビルドファイル(L)': [${workspace_loc:/easypresets/build.xml}]
      • タブ[JRE]
        step2_005jre.png
      • 'Runtime JRE / ランタイムJRE':
        • 別のJRE(P): [java-11-openjdk-amd64]
    • 'Java Build Path / Javaのビルドパス'
    • 'Libraries / ライブラリー(L)'
      step2_006lib.png
      • 'JARの追加(J)...':  [josm/core/dist/josm-custom.jar]
      • 'JARの追加(J)...':  [josm/dist/utilsplugin2.jar]
      • 'ライブラリの追加(l)...': [JRE System Library [java-11-openjdk-amd64]]
      • 'ライブラリの追加(l)...': [JUnit5]
    • Java コンパイラー
      step2_006cmp.png
    • 'プロジェクト固有の設定を可能にする': [ON]
    • 'コンパイラー準拠レベル': [1.8]
    • 'デフォルトの準拠設定の使用': [OFF]
      • '生成された .class ファイルの互換性': [1.8]
      • 'ソースの互換性': [1.8]

(2) EasyPreset 言語変換ファイルを更新する

'(1)'でソースコードを取得した際にすでにコンパイル済みの「言語変換ファイル(*.lang)」も含まれているのでわざわざ更新する必要はないのだが、「日本語化」の手順を示すためにここで「*.lang」の更新手順を示す

dev2_i18n.png

easypresetsには多言語対応用スクリプトが用意されている

i18n_start.shを実行するとsrc/*.javaからテキスト部分を抜き出してi18n/*.poが作成される

  • src/*.java からテキスト部分を抜き出して i18n/*.po を作ってくれる
  cd ~/workspace/josm/plugins/easypresets/
  ./i18n_start.sh 

i18n/*.poを編集してくれ

  • ~/workspace/josm/plugins/easypresets/i18n/*.poを作ってくれるのでそれを編集する

i18n_deploy.shを実行すると、data/*langが作成される

  • i18n/*.po から data/*.lang を作成
  cd ~/workspace/josm/plugins/easypresets/
  ./i18n_deploy.sh

「参考」
- i18n_start.sh
- i18n_deploy.sh

(3) JOSMプラグインをビルド

dev2_ant.png

プラグインをビルドして、easypresets.jarを生成します。

(3-1) JOSMプラグイン[easypresets]のビルド(コマンド編)

* Javaのバージョンを OpenJDK 11 に切り替える

sudo update-alternatives --config java

sudo update-alternatives --config javac

* 2            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac           1111      手動モード
cd ~/workspace/josm/plugins/easypresets
ant clean
ant dist
  • フォルダ'~/workspace/josm/dist/'に、easypresets.jarが生成される

(3-2) [easypresets]のビルド(Eclipse編)

  • 'Eclipse' → プロジェクト[josm]-[plugins]-[easypresets]を右クリック

    • → [プロジェクトのビルド...]を選択
  • フォルダ'~/workspace/josm/dist/'に、easypresets.jarが生成される

(4) [easypresets.jar]をデプロイ

「JOSM」は(ユーザホーム)/.josm/plugins/'にあるプラグインをロードしようとするので、生成されたeasypresets.jarを実行するには、フォルダ'(ユーザホーム)/.josm/plugins/'に、easypresets.jarを配置する必要がある

dev2_deploy.png

  • フォルダ'~/.josm/plugins/'に、easypresets.jarをコピーする

    cp ~/workspace/josm/dist/easypresets.jar ~/.josm/plugins/
    

(5) プラグインの実行

いよいよ実行してみる

ただ実行しただけではつまらないのでブレークポイントを設定してみる

プラグインの開始地点にブレークポイントを設定してみる、プラグインの開始地点はorg.openstreetmap.josm.plugins.Pluginを extend したクラスのコンストラクタだから、

「EasyPresets」の場合には、クラスorg.maripo.josm.easypresets.EasyPresetsPlugin になる

  • コンストラクタEasyPresetsPlugin()super(info)にブレークポイントを設定してみる
    step2_010.png

  • (5-1) プロジェクト「josm」を右クリック → [デバッグ(D)] → [Javaアプリケーション]
    step2_012.png

    • '一致する項目(M)': [MainApplication - org.openstreetmap.josm.gui]
    • [OK]

「josm」が起動する

  • (5-2) 「JOSMメニュー」 → 「プリセット」 → 「Preset preferences...

    • [プラグイン]
      step2_014.png
    • [OFF] 'EasyPresets:' ... "これはJOSMから提供された公式EasyPresetsプラグイン"
    • [ON] 'easypresets:' ... "こちらが開発中のEasyPresetsプラグイン"
    • [OK]
    • JOSMを「再起動」する
    • 「再起動」しても起動されないので、プロジェクト「josm」を右クリック → [デバッグ(D)] → [Javaアプリケーション] を再実行する
  • (5-3) ブレークポイントで止まる
    step2_015.png

ブレークポイントで止まっただろうか?

ここまでくればあとはなんとかなるだろう

では、エンジョイ・プログラミング!!

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2