mike-neckのブログ

Java or Groovy or Swift or Golang

Interface に対してプログラミングする

interface に対してプログラミングするのがベストプラクティスであるとする考え方が、 Java のプログラミングにあるようです。

依存関係を切断・逆転できて便利とか、インターフェースが変わらない限りは実装が変更されても利用するクラスは変更されないなどのメリットがあるんじゃないでしょうか。

オブジェクト指向のなんたるかを論じるほど僕はデキたプログラマーではないので、かわりに Gradlle を使ってビルドするときにどれくらい嬉しいのかを書いていきたいと思います。

なお、これはつい先日(2020/12/11)に行われた JJUG ナイトセミナー Maven/Gradle ビルドツール特集のときにさらりと話した部分の補遺です。

f:id:mike_neck:20201219214441p:plain

続きを読む

GraalVM 20.3 から TraceClassInitialization オプションの指定方法が変更になっていた

GraalVM 20.3 から TraceClassInitialization オプションが boolean 指定ではなく、 List 指定になっています。

そのため、 20.2 まで以下のようにオプションを指定していた場合、カンマ区切りの FQCN に修正する必要があります

〜 20.2 まで

-H:+TraceClassInitialization

20.3 〜

-H:TraceClassInitialization=com.example.FooBarClassName,com.example.BazQuxFullyQualifiedClassName

java プラグインの compile/runtime Configuration が 6.8 の次の 7 からなくなるらしいです

タイトルにあるようなツイートを見かけたので、念の為に。

雑な訳

6.8 の次は 7.0 だよ、いいね

このバージョンからは compileruntime Configuration がなくなるのでお間違いなく

で、 compileruntime を取り除く PR はこちら

github.com

移行方法も書いてあって、

  1. runtime については runtimeOnly に変更する
  2. java プラグインjava-library プラグインに変更する
  3. compileapi に変更する
  4. api は普通は必要ないので、影響のないところから implementation に変更する

f:id:mike_neck:20201213233238p:plain

PR の本文にはバックポートするようなプラグインが云々書いてあるが、出てくるかどうかはわからん

JJUG ナイトセミナーでの初登壇で触れた Gradle の Java toolchain の実験

JJUG ナイトセミナー初登壇してきた(LT は除く)。

で、これはその補足。

最後駆け足で紹介していた最近の Gradle の情報で、 Java toolchain(6.7) improovements(6.8) を実際に試してみた

f:id:mike_neck:20201212022324p:plain

なお、すでに Java toolchain についてはすでにいくつかブログが書かれている。

progret.hatenadiary.com

blog1.mammb.com


試したレポジトリーはこちらです

github.com

やっていることは、次の通り。

Java8 のみがセットアップされた github action runner で

を実行する。

ログはこちら(今(2020/12/12 2:26)から 90 日間有効)

github.com

adoptopenjdk の 15 をダウンロードしてきているのがわかる。

adoptopenjdk の 11 はシステムにインストールされているのでそちらが使われているようだ

なお、こちらをみるとわかるように、 vendor には AZUL を指定しているが、インストールされていない Java15 は adoptopenjdk からダウンロードされた。

github.com


また、 corretto の Java8 しかインストールされていない環境で、ベンダー AZUL を指定していると、以下のようなエラーが発生してしまうようです

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':test'.
> Could not resolve all dependencies for configuration ':testRuntimeClasspath'.
   > Failed to calculate the value of task ':compileJava' property 'javaCompiler'.
      > No compatible toolchains found for request filter: {languageVersion=8, vendor=AZUL, implementation=vendor-specific} (auto-detect true, auto-download true)

自動プロビジョニング周りはもう少し観察が必要かもしれません