KotlinでImageJ Plugin作成-1
はじめに
Kotlinという言語がある。Javaと互換性があり、Androidのアプリ開発で使われている。AppleのSwiftになんとなく似てる。Null安全というおもしろい仕組みがある。たとえばJavaでImagePlus imp;
Roi roi = imp.getRoi();
とすると、ビルドは通るが実行時にNullPointerException(ヌルポ)が出て怒られる。kotlinで同じ個所を書くとこんな感じになる(と思う)var imp: ImagePlus? = null
var roi: Roi? = null
if (imp != null)
roi = imp.Roi;
//あるいは
roi = imp?.Roi;
なんだかJavaのコードに比べてコード数が倍以上に増えてしまっている。- Kotlinでは、nullが代入される可能性がある変数には、?をつけないといけない(1行目、2行目)。
- nullを参照する際に、if文でnullじゃないことを確認しないとけない(4行目、5行目)
- あるいは、安全呼び出しとして、.のかわりに?.を使う必要がある(7行目)
準備
(いつものように)形から入る。kotlinを扱う場合、IDEはEclipseではなくIntelliJ IDEAがいいらしい。そもそもKotlinはJet Brains社で開発された言語で、IntelliJ IDEAもJet Brains社が提供しているので相性が良い。EclipseにもPluginはあるそうだが、どうもそれほど使い勝手が良くないらしい(2017.1.23現在。自分では試していません。。。)。ということで、IntelliJ IDEAをインストールする。当然Community Edtion (Free)。Intelli Jの設定
- Intelli J IDEA
- 真ん中にあるDownloadを選んで、CommunityをDownload
- インストールはデフォルト設定で良いと思います。
- 初期設定(かなり適当)
- 起動後、設定を引き継ぐかどうか聞かれるので適当に選択
- プロジェクトの保存先(Eclipseでいうworkspace)を聞かれるので適当に作成する
- Create New Projectを選ぶ
- Check out from Version Controlを選べば、例えばGithubからリポジトリをCloneしてくることも可能(minimal-ij1-pluginとか)。今回は使わない。
Kotlin + ImageJのプロジェクト作成
- Create New Projectを選ぶと、New Projectというウィンドウが出てきて、JavaとかKotolinとかのProjectを作成することができる。ここでは、あえてMavenを選ぶ(後でkotolinにします)
- Kotlinを選んでからMaven可もできるはずだけどよくわからなかった。。
- いろんなarchetypeが出てくるが、ImageJのPlugin開発には関係ない(たぶん)なので、右下の[Next]を選ぶ
- MavenでおなじみのGroupid, Artifactid, Versionを入力する
- Groupidは開発者が属する組織や、個人を識別するドメインを入れる。私の場合は
jp.yo4
など。ドメインの順は逆なのが通例 - Artifactidは最終的なプロダクト(.jarなど)の名前になる。ImageJのPluginの場合、必ず名前のどこかにアンダーバー”_”を入れないといけない
- Versionはお好みで。開発中のバージョンにはSNAPSHOTを入れておく。
- Groupidは開発者が属する組織や、個人を識別するドメインを入れる。私の場合は
- Project名と保存場所を指定して[Finish]
- そうすると、何もない殺風景な画面になり心配になるのでとりあえずProject Viewを開く。[View -> Tool Window -> Project]
- 画面左にProjectが表示される。
ProjectのKotolin化
このままではただのMavenのProjectなのでこのProjectをKotlin化する- メニューから[Tools -> Kotlin -> Configure Kotlin in Project]
- Single moduleで今作ったProjectを選んで[OK]
ImageJのdependencyを加える
いつもはminimal-ij1-pluginをgithubからクローンして設定を書き換えて使っているが、ここでは新規にMavenのProjectを作ったので、手動でdependencyを加えてみる。- pom.xmlを開く
- すでに開いている場合はそのままでよい。開いていない場合は、Project Viewの自分のProjectを展開してpom.xmlを選ぶ
- どこでもいいので[alt + insert]を押す
- GenerateというContext menuが現れるので、Dependencyを選ぶ
- Maven Artifact Searchウィンドウが開く。ここからMaven Repositoryを選ぶことができる。
- 上のフォームに”imagej”と入力する
- たぶん3つの候補が得られる。最低限必要なのは真ん中のij:1.xx (xxはバージョン名)
- imagej-maven-pluginをいれると、ImageJのPluginを開発するときに便利な機能(copy-jars)が使えるようになる。
- pom-imagejはImageJの様々なライブラリであるBill of Materialsが使えるようになる
- とりあえず、真ん中のij:1.51gを入れとく
(2017/01/25 タイトルを少し変更)
(2017/03/10 Maven Artifact Searchのウィンドウを追加)
ImageJのdependencyを加えるの項目の5番で3つの候補が得られません
返信削除「Not Result」と返ってきます。他に設定する項目があるのでしょうか?
Windows10,Communiyu Edition2016.3.5です
こんにちは。コメントありがとうございます。Maven artifact searchのウィンドウが表示された際に、repositoryの一覧は表示されているでしょうか(ブログ本文に画像を追加しました)。表示されていない場合、Maven RepositoryをUpdateする必要があるのかもしれません(私は無意識でやっていたのかも。。)
返信削除Stack overflowに以下の記事がありました。
http://stackoverflow.com/questions/3990372/maven-artifact-search-is-always-empty
Maven Repositoryをreimportする
http://stackoverflow.com/questions/9980869/force-intellij-idea-to-reread-all-maven-dependencies
このあたりが参考になるのかもしれません。。
返信ありがとうございます。
返信削除頂いた情報を基に問題を解決することができました。ありがとうございます。
続きの記事を参考にしてInvertのサンプルを作ることができました。
ありがとうございました。
うまくいってよかったです。またどうぞよろしくお願いします。
返信削除