Skip to main content

Program

How to get version defined in pom.xml

Getting ways of the version defined in pom.xml Constant Property Package Module What the case in the use of native-image? Result of Measurements Summary References Getting ways of the version defined in pom.xml # Java 17が出たことだし,いい加減に Java のモジュールシステムを本格的に使いだそうとしている. 最近のJavaの自作ツールは一応モジュール対応にしたつもり(pochi,vhcなど). で,ビルドツールは Maven を使うことが多いのだけど,pom.xml で設定したバージョン情報をアプリケーションからどんな情報で取得できるかを確認してみた. 次の4つの方法に分類できる. Constant: 自分でバージョンの文字列をString型リテラルとしてソースコードに書き込む. Property: src/main/resourcesにプロパティファイルとしてバージョン情報を置いておく. Package: MANIFEST.MFに書かれている Implementation-VersionやSpecification-Versionのいずれかを利用する. Module: ModuleDescriptorのversionメソッドから利用する. それぞれの分類を独断と偏見で4段階で評価してみた(1が良くて,4が悪い).

Programming Languages

·82 words
とあるユーティリティプログラムを作成しようと思ったものの,どのような言語で作成しようかと悩み中. 希望としては,ワンバイナリが生成可能,ジェネリクスあり,ストリーム処理,あたりが扱えると嬉しい. また,クロスコンパイルしたいし,書きやすい(EtoW; Easy to Write)言語であると嬉しい. で,まとめてみた. Language One Binary Generics Stream Cross Compile EtoW Java GraalVM OK OK Hard OK Go OK 1.17- No OK OK Rust OK? OK ??? OK? No Node.js ??? ??? OK N/A OK Python ??? OK? ??? ??? OK Kotlin OK? OK OK OK ??? Java は GraalVM を使うとバイナリを作成できるけど,面倒. GraalVM を使ってもクロスコンパイルは難しいんじゃないかな. GitHub Actions などを使えばクロスコンパイルはできそうだけど,面倒だなぁ. Go は概ね良いのだけど,ストリーム処理が行えないのが悩みどころ. ジェネリクスも出たばかりであまり書き慣れていない. 例外処理はなくてもいいや. Rust も良いのだけど,コンパイルを通すのに一苦労な点で,簡単なユーティリティを書くのにはそぐわない気がする. Node.js,Python はよく知らない. ちょっと調べてみると Kotlin がネイティブコードを生成できるらしい Kotlin も結局は Java バイトコードに変換するはずだから, GraalVM と何が違うのかはよく分からないし,これまでに書いたことないけど,書いてみようかな.