Skip to content

Releases: sbt/sbt

1.4.0-RC2

23 Sep 12:45
v1.4.0-RC2

Choose a tag to compare

1.4.0-RC1

08 Sep 02:16
v1.4.0-RC1
d1e7b2c

Choose a tag to compare

1.4.0-M2

08 Sep 02:15
v1.4.0-M2
31dc975

Choose a tag to compare

1.4.0-M2 Pre-release
Pre-release
v1.4.0-M2

1.4.0-M2

1.3.13

27 Jun 21:54
v1.3.13
dd00fc6

Choose a tag to compare

Fixes

  • Updates to Giter8 0.13.1 to fix sbt new on Windows
  • Works around incomplete preloaded local distribution, by turning it off for now #5587
  • Fixes missingOk under Coursier #5634/sbt-coursier#212 by @eed3si9n
  • Fixes UNC paths handling in Resolver.file(...) lm#337 by @eed3si9n
  • Fixes sbt.bat not working under a directory with whitespace name lp#324 by @l-konov
  • Fixes -debug not working in SBT_OPTS lp#322 by @henricook
  • Fixes Robocopy output in sbt.bat lp#325 by @er1c

1.4.0-M1

23 Jun 21:25
v1.4.0-M1
c07de68

Choose a tag to compare

1.4.0-M1 Pre-release
Pre-release

Fixes with compatibility implications

Build server protocol (BSP) support

sbt 1.4.0 adds build server protocol (BSP) support, contributed by Scala Center. Main implementation was done by Adrien Piquerez (@adpi2) based on @eed3si9n's prototype.

When sbt 1.4.0 starts, it will create a file named .bsp/sbt.json containing a machine-readable instruction on how to run sbt -bsp, which is a command line program that uses standard input and output to communicate to sbt server using build server protocol.

How to import to IntelliJ using BSP

  1. Start sbt in a terminal
  2. Open IntelliJ IDEA 2020.1.2 or later
  3. Select "Open or import", and select "BSP Project"

How to import to VS Code + Metals

  1. Delete existing .bsp directory if any
  2. Open VS Code in the working directory
  3. Ignore the prompt to import the project
  4. Start sbt -Dsbt.semanticdb=true in the Terminal tab. Wait till it displays "sbt server started"
  5. Navigate to Metals view, and select "Connect to build server"
  6. Type compile into the sbt session to generate SemanticDB files

#5538/#5443 by [@adpi2][@adpi2]

VirtualFile + RemoteCache

sbt 1.4.0 / Zinc 1.4.0 virtualizes the file paths tracked during incremental compilation. The benefit for this that the state of incremental compilation can shared across different machines, as long as ThisBuild / rootPaths are enumerated beforehand.

To demonstrate this, we've also added experimental cached compilation feature to sbt. All you need is the following setting:

ThisBuild / pushRemoteCacheTo := Some(MavenCache("local-cache", file("/tmp/remote-cache")))

Then from machine 1, call pushRemoteCache. This will publish the *.class and Zinc Analysis artifacts to the location. Next, from machine 2, call pullRemoteCache.

[zinc#712][zinc712]/#5417 by [@eed3si9n][@eed3si9n]

Build linting

On start up, sbt 1.4.0 checks for unused settings/tasks. Because most settings are on the intermediary to other settings/tasks, they are included into the linting by default. The notable exceptions are settings used exclusively by a command. To opt-out, you can either append it to Global / excludeLintKeys or set the rank to invisible.

#5153 by [@eed3si9n][@eed3si9n]

Conditional task

sbt 1.4.0 adds support for conditional task (or Selective task), which is a new kind of task automatically created when Def.task { ... } consists of an if-expression:

bar := {
  if (number.value < 0) negAction.value
  else if (number.value == 0) zeroAction.value
  else posAction.value
}

Unlike the regular (Applicative) task composition, conditional tasks delays the evaluation of then-clause and else-clause as naturally expected of an if-expression. This is already possible with Def.taskDyn { ... }, but unlike dynamic tasks, conditional task works with inspect command. See Selective functor for sbt for more details. #5558 by [@eed3si9n][@eed3si9n]

Other updates

Participation

sbt 1.4.0-M1 was brought to you by 25 contributors. Eugene Yokota (eed3si9n), Ethan Atkins, Adrien Piquerez, Dale Wijnand, Jason Zaugg, Arnout Engelen, Guillaume Martres, Anil Kumar Myla, Brice Jaglin, Steve Waldman, frosforever, Alex Zolotko, Heikki Vesalainen, Stephane Landelle, Jannik Theiß, João Ferreira, lloydmeta, Alexandre Archambault, Erwan Queffelec, Ismael Juma, Kenji Yoshida (xuwei-k), Olafur Pall Geirsson, Renato Cavalcanti, Vincent PERICART, nigredo-tori. Thanks!

Thanks to everyone who's helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting builds, porting plugins, and submitting and reviewing pull requests.

For anyone interested in helping sbt, there are many avenues for you to help, depending on your interest. If you're interested, Contributing, "help wanted", "good first issue" are good starting points.

Appendix

To test sbt server manually, make sure to have an sbt session running, and start sbt -bsp in another termnial. And paste the following in:

{ "jsonrpc": "2.0", "id": 1, "method": "build/initialize", "params": { "displayName": "foo", "version": "1.0.0", "bspVersion": "2.0.0-M5", "rootUri": "file:///tmp/hello", "capabilities": { "languageIds": ["scala"] } } }

Then enter \r\n (type Enter, Ctrl-J for zsh). This should return:

Content-Length: 200
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","id":1,"result":{"displayName":"sbt","version":"1.4.0-SNAPSHOT","bspVersion":"2.0.0-M5","capabilities":{"compileProvider":{"languageIds":["scala"]},"dependencySourcesProvider":true}}}
Read more

1.3.12

31 May 04:58
v1.3.12
ea477e0

Choose a tag to compare

change since 1.3.11

There was a regression in sbt 1.3.11 around the handling of repositories file. sbt 1.3.12 fixes it. #5583

lm-coursier 2.0.0-RC6-4

sbt 1.3.11 updates lm-coursier to 2.0.0-RC6-4, which deprecates $HOME/.coursier/cache directory in favor of OS specific cache locations:

  • $HOME/Library/Caches/Coursier/v1 for macOS
  • %LOCALAPPDATA%\Coursier\Cache\v1 for Windows
  • $HOME/.cache/coursier/v1 for Linux etc

other fixes

1.3.11

29 May 19:17
v1.3.11
8630114

Choose a tag to compare

There was a regression in sbt 1.3.11. Please use sbt 1.3.12 instead.

1.3.10

15 Apr 03:32
v1.3.10
be9b4b0

Choose a tag to compare

  • Adds support for null/blank-realm credential for Maven repos hosted on Azure DevOps or Google Cloud Platform ivy#36 / #2366 by @eed3si9n
  • Updates to sjson-new 0.8.3 #5498 by @eed3si9n

1.3.9

31 Mar 16:56
v1.3.9
83fc304

Choose a tag to compare

Fixes

1.3.8

04 Feb 00:38
v1.3.8
3c207af

Choose a tag to compare

Fixes

  • Fixes Coursier resolvers so the project resolvers come first #5413 by @raboof
  • Fixes intermittent NullPointerException in sbt.internal.inc.binary.BinaryAnalysisFormat.writeAPIs caused by a race condition zinc#731 by @hvesalai
  • Work around Scaladoc range position bug zinc#735 by @eed3si9n
  • Fixes "AssertionError: assertion failed: Expected protocol to be 'file' or empty in URI jar:file..." #4305 by @lloydmeta
  • Fixes "CreateFile() failed with error 123" on Windows io#283 by @eatkins
  • Fixes Path.allSubpaths so that the given path is no longer included in the return value io#285 by @eatkins