mike-neckのブログ

Java or Groovy or Swift or Golang

precompiled groovy dsl (groovy-gradle-plugin)が便利そう

precompiled groovy dslbuildSrc プロジェクトに gradle ファイルを入れておくと、メインの build.gradleプラグイン取り込みの仕組みを使って取り込める機能で、ファイルを分割して apply from <file> としてたビルドファイルを分割していた仕組みの強化版(コンパイルされるので速い)です。

f:id:mike_neck:20150917235151p:plain

続きを読む

sdkman で複数のバージョンの Java をディレクトリーごとに切り替える

複数のプロジェクトを行ったり来たりする際に、プロジェクトごとに Java のバージョンが違っている際は、たいてい IntelliJ が覚えていてくれるので、それほど困ってはいないのですが、世の中にはターミナルでなんでもこなす人がいるらしく、プロジェクトごとに Java のバージョンを設定するツールが求められているらしいです。いわゆる env 系ツール(renvnodenv)ですが、それの Java 版の jenv というものがあるようです。

takezoe.hatenablog.com

ざっとドキュメントを見たところでは「特定のディレクトリのみこのバージョンを使う」という設定ができるかどうかわかりませんでした。

ということのようですが、つい先程、 sdkman でもそのようなニーズに答えるようになったようです。

env Command

というわけで、 バージョン 5.8.1 から使える env の動作を確認してみようと思ったのですが

f:id:mike_neck:20200505075414p:plain

このブログを書いている時点ではまだ更新できませんでしたが、すでに env コマンドが搭載されているようなので試してみることにしました。

続きを読む

asciidoctor-gradle-plugin の使い方

google で「asciidoctor gradle plugin」で検索して表示される結果が古すぎて使い物にならなかったので、書いておくことにした。古いものベースで gradle を書いていたところ、DSL でわからないところがあったため、 github でコードを探したが見つからず混乱の原因になった。バージョン 1.5.8 とか 1.5.9 などについて書いてあるものは古い。最新は 3.1.0 である。


続きを読む

github actions で GraalVM でつくったネイティブアプリケーションを GitHub リリースする

date コマンドを使うときにいつもググって調べるくらいの unix 音痴で、 Java の JSR310 ならすぐできるのにと思うことが多いので、そのようなコマンドを作ることにしました。

github.com

機能はまだ作り込んでいなくて、まずはフォーマットを指定できるだけです。

f:id:mike_neck:20200429185457p:plain

対応 OS は LinuxMac OS X です。 Windows でも Windows SDK 7.1 の環境を整えればビルドできます(参考は こちら)が、 github actions で環境を整えるのが難しそうだったので、github ではリリースしていません。

なお、Mac OS X 版はサインしてない野良アプリなので、初回の起動は「Mac 野良アプリ 起動」でググったら出てくる Apple の未署名のアプリの起動方法みたいなページを参考に起動してください。


本題に戻ると、公式の actions を使いこなせばそれほど難しいところはありませんでした。

github.com

github actions のワークフロー概略は次の図のとおりです。

f:id:mike_neck:20200429193032p:plain

ポイントとしては、

  • タグに付き一つしかリリースを作れないので、 create-release は最初の Job で実行する
  • create-release をしたときの結果である release_id(未使用) と release_url を artifact として upload する
  • 各 OS の job では、最初の Job の artifact である release_url をダウンロードしてビルドしたバイナリーを upload-release でリリースする

です。

Golang のように、一つの OS ですべてのバイナリーをビルドできないので若干手が込んでいます。

また、 GrallVM のセットアップには DeLaGuardo/setup-graalvm@2.0 を使っています。これは比較的高速にセットアップされるのでこれと Gradle graalvm-native-image プラグインを使うと native-imageを作るときにに GraalVM をダウンロードする仕組みよりも高速にビルドできます。

github.com

plugins.gradle.org