君達の JDK は全て jabba がいただいた

OpenJDK 11-ea, GraalVM, Eclipse OpenJ9 を試してみたり、未だに OpenJDK 6 でビルドしなければいけなかったりしたとしても jabba なら万全だ。jabba は Stanley Shyiko (@shyiko) さんが作ったクロスプラットフォームな Java のバージョンマネージャーだ。

以下は jabba を使って Travis CI 上で Azul Zulu OpenJDK 6 を用いてビルドする方法だ:

sudo: false
dist: trusty
group: stable
 
language: scala
 
env:
  global:
    - TRAVIS_JDK=zulu@1.6.107
    - JABBA_HOME=/home/travis/.jabba
  matrix:
    - SCRIPT_TEST="; mimaReportBinaryIssues; test"
 
before_install:

2018.06 mixtape

Spotify: https://open.spotify.com/user/1235450353/playlist/4jqNCyUylGh9zCYt0JHqEv...
YouTube: https://www.youtube.com/playlist?list=PLSUh6oJ5ZotVoTIXr6OBeLuUSor-PDN_p

  • The Seed - ANIMA!
  • Looped - Kiasmos
  • Naive - RKCB
  • Making Distractions - Kllo
  • Lights - YOSIE, LO
  • CR-V - Cuco
  • Arisen My Senses - Björk
  • Hush - Tourist
  • You and Me - Shallou
  • Last Day… - Shallou
  • Life, Life (Andy Stott Remodel) - Ryuichi Sakamoto
  • Nix - Dawn of Midi
  • A Meaningful Moment Through a Meaning(less) Process - Stars Of The Lid
  • Obfuse - Floating Points

Expecty を用いた power assert を復活させる

僕は Expecty を試してみたかったので、eed3si9n/expecty にフォークして、sbt ビルドを追加して、コードが Scala 2.10、2.11、2.12、2.13.0-M4 で動作するようにパッチを当てて、上流にプルリクを還元した後でパッケージ名を変更して、Maven Central に公開した:

libraryDependencies += "com.eed3si9n.expecty" %% "expecty" % "0.11.0" % Test

Scala.JS か Scala Native の場合は:

libraryDependencies += "com.eed3si9n.expecty" %%% "expecty" % "0.11.0" % Test

以下のように使うことができる:

scala> import com.eed3si9n.expecty.Expecty.assert
import com.eed3si9n.expecty.Expecty.assert
 
scala> assert(a * b == 7)
java.lang.AssertionError:
 
assert(a * b == 7)
       | | | |
       1 3 3 false
 
  at com.eed3si9n.expecty.Expecty$ExpectyListener.expressionRecorded(Expecty.scala:25)
  at com.eed3si9n.expecty.RecorderRuntime.recordExpression(RecorderRuntime.scala:34)
  ... 38 elide

上のように、ナイスなエラーメッセージが自動的に得られる。

sbt-sriracha を用いたホットなソース依存

in

ソース依存性はかなり前から sbt に存在するが、あまりドキュメント化されていない機能の一つだ。

sbt-sriracha を使って、µTest へのハイブリッド依存性は以下のように定義できる:

lazy val utestJVMRef = ProjectRef(uri("git://github.com/eed3si9n/utest.git#5b19f47c"), "utestJVM")
lazy val utestJVMLib = "com.lihaoyi" %% "utest" % "0.6.4"
 
lazy val root = (project in file("."))
  .sourceDependency(utestJVMRef % Test, utestJVMLib % Test)
  .settings(
    name := "Hello world",
    testFrameworks += new TestFramework("utest.runner.Framework"),
  )

これらの変更によって改造版の µTest を Scala 2.13.0-M4 上で走らせられるようになった。

Bash からの Java バージョンの検知

昨日 Travis CI を用いてクロス JVM テスト する方法を書いた。

Travis CI を用いた macOS 上での Scala アプリのテスト

Travis CI を用いて macOS 上で Scala アプリのテストを行うことも可能だ。これは Lars さんと Muuki さんの方法 Testing Scala programs with Travis CI on OS X をアレンジしたものだ。

dist: trusty
 
language: scala
 
matrix:
  include:
    ## build using JDK 8, test using JDK 8
    - script:
        - sbt universal:packageBin

Travis CI を用いたクロス JVM テスト

in

Oracle は non-LTS JDK を 6ヶ月おき、LTS JDK を 3年おきにリリースする計画だ。また、今後は OpenJDK に集約されていくらしい。計画どおりにいけば、JDK 9 は 2018年3月に EOL、JDK 10 は 2018年3月にリリースされ、2018年9月に EOL、そして 2018年9月に JDK8 をリプレースする LTS JDK 11 は 2021年まで続くということになる。

今後立て続けにリリースされる JDK に備えて、Travis CI を使ってアプリを JDK 8, JDK 9, そして JDK 10 Early Access でテストする方法を紹介する。

dist: trusty
 
language: scala
 
matrix:
  include:
    ## build using JDK 8, test using JDK 8
    - script:
        - sbt universal:packageBin
        - cd citest && ./test.sh
 
    ## build using JDK 8, test using JDK 9

sbt-nocomma を用いたカンマの消去

in

本稿は build.sbt からカンマを消去する nocomma { ... } マクロを導入する sbt-nocomma を紹介する。

import Dependencies._
 
lazy val root = (project in file("."))
  .settings(nocomma {
    ThisBuild / organization := "com.example"
    ThisBuild / scalaVersion := "2.12.4"
    ThisBuild / version      := "0.1.0-SNAPSHOT"
 
    name := "Hello"
 
    // comment works
    libraryDependencies += scalaTest % Test
  })

sbt-sticker

in

以前ツイートしたとおり、sbt ステッカーを自作した。

自分が欲しいから作ったわけだが、sbt エコシステムのコントリビューターの皆さんにも配っている。

過去にバグ報告したり、Stackoverflow や社内で質問に答えたり、プラグイン作ったり、sbt の勉強会をやったり、プルリクを送ってくれた人は是非 ScalaMatsuri や Scala Days で声をかけてください。

猫番: 17日目

in

猫番: 17日目を書いた。始対象と終対象、積、双対性、余積など抽象構造を見ていきつつ、Either を coproduct として使う方法を紹介します。

Neovim と sbt server

in

sbt server 統合シリーズ・パート3 は Neovim だ。これまでに VS CodeSublime Text 3 をカバーした。

vim-scala-sbt

Syndicate content