sbt 1.0.x releases

sbt 1.0.4

This is a hotfix release for sbt 1.0.x series.

Bug fixes

Fixes undercompilation of value classes when the underlying type changes. zinc#444 by @smarter

Fixes ArrayIndexOutOfBoundsException on Ivy when running on Java 9. ivy#27 by @xuwei-k

on Ivy when running on Java 9. ivy#27 by @xuwei-k Fixes Java 9 warning by upgrading to launcher 1.0.2. ivy#26/launcher#45 by @dwijnand

Fixes -jvm-debug on Java 9. launcher-package197 by @mkurz

on Java 9. launcher-package197 by @mkurz Fixes run outputting debug level logs. #3655/#3717 by @cunei

outputting debug level logs. #3655/#3717 by @cunei Fixes performance regression caused by classpath hashing. zinc#452 by @jvican, @fommil provided reproduction, and @eed3si9n fixed https://github.com/sbt/zinc/issues/457

Fixes performance regression of testQuick . #3680/#3720 by @OlegYch

. #3680/#3720 by @OlegYch Disables Ivy log4j caller location calculation for performance regression reported in #3711. util#132 by @leonardehrenfried

Works around Scala compiler’s templateStats() not being thread-safe. #3743 by @cunei

not being thread-safe. #3743 by @cunei Fixes “Attempting to overwrite” error message. lm#174 by @dwijnand

Fixes incorrect eviction warning message. lm#179 by @xuwei-k

Registers Ivy protocol only for http: and https: to be more plugin friendly. lm183 by @tpunder

and to be more plugin friendly. lm183 by @tpunder Fixes script issues related to bc by using expr . launcher-package#199 by @thatfulvioguy

Enhancement

Adds Scala 2.13.0-M2 support. zinc#453 by @eed3si9n and @jan0sch

Internal

Improves Zinc scripted testing. zinc#440 by @jvican

Contributors

A huge thank you 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.

This release was brought to you by 17 contributors, according to git shortlog -sn --no-merges v1.0.3..v1.0.4 on sbt, zinc, librarymanagement, util, io, and website: Eugene Yokota, Kenji Yoshida (xuwei-k), Jorge Vicente Cantero (jvican), Dale Wijnand, Leonard Ehrenfried, Antonio Cunei, Brett Randall, Guillaume Martres, Arnout Engelen, Fulvio Valente, Jens Grassel, Matthias Kurz, OlegYch, Philippus Baalman, Sam Halliday, Tim Underwood, Tom Most. Thank you!

sbt 1.0.3

This is a hotfix release for sbt 1.0.x series.

Bug fixes

Fixes ~ recompiling in loop (when a source generator or sbt-buildinfo is present). #3501/#3634 by @dwijnand

recompiling in loop (when a source generator or sbt-buildinfo is present). #3501/#3634 by @dwijnand Fixes undercompilation on inheritance on same source. zinc#424 by @eed3si9n

Fixes the compilation of package-protected objects. zinc#431 by @jvican

Workaround for Java returning null for getGenericParameterTypes . zinc#446 by @jvican

for . zinc#446 by @jvican Fixes test detection regression. sbt 1.0.3 filters out nested objects/classes from the list, restoring compatibility with 0.13. #3669 by @cunei

Uses Scala 2.12.4 for the build definition. This includes fix for runtime reflection of empty package members under Java 9. #3587 by @eed3si9n

Fixes extra / in Ivy style patterns. lm#170 by @laughedelic

in Ivy style patterns. lm#170 by @laughedelic Fixes “destination file exist” error message by including the file name. lm171 by @leonardehrenfried

Fixes JDK 9 warning “Illegal reflective access” in library management module and Ivy. lm173 by @dwijnand

Improvements

Adds sbt.watch.mode system property to allow switching back to old polling behaviour for watch. See below for more details.

Alternative watch mode

sbt 1.0.0 introduced a new mechanism for watching for source changes based on the NIO WatchService in Java 1.7. On some platforms (namely macOS) this has led to long delays before changes are picked up. An alternative WatchService for these platforms is planned for sbt 1.1.0 (#3527), in the meantime an option to select which watch service has been added.

The new sbt.watch.mode JVM flag has been added with the following supported values:

polling : (default for macOS) poll the filesystem for changes (mechanism used in sbt 0.13).

: (default for macOS) poll the filesystem for changes (mechanism used in sbt 0.13). nio (default for other platforms): use the NIO based WatchService .

If you are experiencing long delays on a non-macOS machine then try adding -Dsbt.watch.mode=polling to your sbt options.

#3597 by @stringbean

Contributors

A huge thank you 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.

This release was brought to you by 15 contributors, according to git shortlog -sn --no-merges v1.0.2..v1.0.3 on sbt, zinc, librarymanagement, util, io, and website: Eugene Yokota, Dale Wijnand, Michael Stringer, Jorge Vicente Cantero (jvican), Alexey Alekhin, Antonio Cunei, Andrey Artemov, Jeffrey Olchovy, Kenji Yoshida (xuwei-k), Dominik Winter, Long Jinwei, Arnout Engelen, Justin Kaeser, Leonard Ehrenfried, Sakib Hadžiavdić. Thank you!

sbt 1.0.2

This is a hotfix release for sbt 1.0.x series.

Bug fixes

Fixes terminal echo issue. #3507 by @kczulko

Fixes deliver task, and adds makeIvyXml as a more sensibly named task. #3487 by @cunei

task, and adds as a more sensibly named task. #3487 by @cunei Replaces the deprecated use of OkUrlFactory , and fixes connection leaks. lm#164 by @dpratt

, and fixes connection leaks. lm#164 by @dpratt Refixes false positive in DSL checker for setting keys. #3513 by @dwijnand

Fixes run and bgRun not picking up changes to directories in the classpath. #3517 by @dwijnand

and not picking up changes to directories in the classpath. #3517 by @dwijnand Fixes ++ so it won’t change the value of crossScalaVersion . #3495/#3526 by @dwijnand

so it won’t change the value of . #3495/#3526 by @dwijnand Fixes sbt server missing some messages. #3523 by @guillaumebort

Refixes consoleProject . zinc#386 by @dwijnand

. zinc#386 by @dwijnand Adds JVM flag sbt.gigahorse to enable/disable the internal use of Gigahorse to workaround NPE in JavaNetAuthenticator when used in conjunction with repositories override. lm#167 by @cunei

to enable/disable the internal use of Gigahorse to workaround NPE in when used in conjunction with override. lm#167 by @cunei Adds JVM flag sbt.server.autostart to enable/disable the automatic starting of sbt server with the sbt shell. This also adds new startServer command to manually start the server. by @eed3si9n

Internal

Fixes unused import warnings. #3533 by @razvan-panda

Contributors

A huge thank you to everyone who’s helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting plugins, and submitting and reviewing pull requests.

This release was brought to you by 19 contributors, according to git shortlog -sn --no-merges v1.0.1..v1.0.2 on sbt, zinc, librarymanagement, and website: Dale Wijnand, Eugene Yokota, Kenji Yoshida (xuwei-k), Antonio Cunei, David Pratt, Karol Cz (kczulko), Amanj Sherwany, Emanuele Blanco, Eric Peters, Guillaume Bort, James Roper, Joost de Vries, Marko Elezovic, Martynas Mickevičius, Michael Stringer, Răzvan Flavius Panda, Peter Vlugter, Philippus Baalman, and Wiesław Popielarski. Thank you!

sbt 1.0.1

This is a hotfix release for sbt 1.0.x series.

Bug fixes

Fixes command support for cross building + command. The + added to sbt 1.0 traveres over the subprojects, respecting crossScalaVersions ; however, it no longer accepted commands as arguments. This brings back the support for it. #3446 by @jroper

command. The added to sbt 1.0 traveres over the subprojects, respecting ; however, it no longer accepted commands as arguments. This brings back the support for it. #3446 by @jroper Fixes addSbtPlugin to use the correct version of sbt during cross building. #3442 by @dwijnand

to use the correct version of sbt during cross building. #3442 by @dwijnand Fixes run in Compile task not including Runtime configuration, by reimplementing run in terms of bgRun . #3477 by @eed3si9n

task not including configuration, by reimplementing in terms of . #3477 by @eed3si9n Shows actual as a potential option of inspect #3335 by @Duhemm

as a potential option of #3335 by @Duhemm Includes base directory to watched sources. #3439 by @Duhemm

Adds an attempt to workaround intermittent NullPointerException arround logging. util#121 by @eed3si9n

arround logging. util#121 by @eed3si9n Reverts a bad forward porting. #3481 by @eed3si9n

WatchSource

The watch source feature went through a major change from sbt 0.13 to sbt 1.0 using NIO; however, it did not have clear migration path, so we are rectifying that in sbt 1.0.1.

First, sbt.WatchSource is a new alias for sbt.internal.io.Source . Hopefully this is easy enough to remember because the key is named watchSources . Next, def apply(base: File) and def apply(base: File, includeFilter: FileFilter, excludeFilter: FileFilter) constructors were added to the companion object of sbt.WatchSource .

For backward compatiblity, sbt 1.0.1 adds += support ( Append instance) from File to Seq[WatchSource] .

So, if you have a directory you want to watch:

watchSources += WatchSource(sourceDirectory.value)

If you have a list of files:

watchSources ++= (sourceDirectory.value ** "*.scala").get

#3438 by @Duhemm; #3478 and io#74 by @eed3si9n

sbt 1.0.0

Features, fixes, changes with compatibility implications

See Migrating from sbt 0.13.x also.

sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.

for build definitions and plugins. This also requires JDK 8. Many of the case classes are replaced with pseudo case classes generated using Contraband. Migrate .copy(foo = xxx) to withFoo(xxx) . For example, UpdateConfiguration , RetrieveConfiguration , PublishConfiguration are refactored to use builder pattern.

to . For example, , , are refactored to use builder pattern. Zinc 1 drops support for Scala 2.9 and earlier. Scala 2.10 must use 2.10.2 and above. Scala 2.11 must use 2.11.2 and above. (latest patch releases are recommended)

config("xyz") must be directly assigned to a capitalized val , like val Xyz = config("xyz") . This captures the lhs identifier into the configuration so we can use it from the shell later.

must be directly assigned to a capitalized , like . This captures the lhs identifier into the configuration so we can use it from the shell later. Changes publishTo and otherResolvers from SettingKeys to TaskKeys. #2059/#2662 by @dwijnand

and from SettingKeys to TaskKeys. #2059/#2662 by @dwijnand Path.relativizeFile(baseFile, file) is renamed to IO.relativizeFile(baseFile, file) .

is renamed to . PathFinder ’s .*** method is renamed to .allPaths method.

’s method is renamed to method. PathFinder.x_!(mapper) is moved to def pair on PathFinder .

is moved to on . A number of the methods on sbt.Path (such as relativeTo and rebase and flat ) are now no longer in the default namespace by virtue of being mixed into the sbt package object. Use sbt.io.Path to access them again.

(such as and and ) are now no longer in the default namespace by virtue of being mixed into the sbt package object. Use to access them again. sbt 1.0 renames Global as scope component to Zero to disambiguate from GlobalScope . @eed3si9n

as scope component to to disambiguate from . @eed3si9n sbt 1.0 uses ConfigRef in places where String was used to reference configuration, such as update.value.configuration(...) . Pass in Configuration , which implicitly converts to ConfigRef .

in places where was used to reference configuration, such as . Pass in , which implicitly converts to . Changes sourceArtifactTypes and docArtifactTypes from Set[String] to Seq[String] settings.

and from to settings. Renames early command feature from --<command> to early(<command>) .

to . Drops sbt 0.12 style hyphen-separated key names (use publishLocal instead of publish-local ).

instead of ). Log options -error , -warn , -info , -debug are added as shorthand for "early(error)" etc.

, , , are added as shorthand for etc. sbt.Process and sbt.ProcessExtra are dropped. Use scala.sys.process instead.

and are dropped. Use instead. incOptions.value.withNameHashing(...) option is removed because name hashing is always on.

option is removed because name hashing is always on. TestResult.Value is now called TestResult .

is now called . The scripted plugin is cross-versioned now, so you must use %% when depending on it.

Dropped dreprecations:

sbt 0.12 style Build trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins and Build trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt.

trait that was deprecated in sbt 0.13.12, is removed. Please migrate to build.sbt. Auto plugins and trait do not work well together, and its feature is now largely subsumed by multi-project build.sbt. sbt 0.12 style Project(...) constructor is restricted down to two parameters. This is because settings parameter does not work well with Auto Plugins. Use project instead.

constructor is restricted down to two parameters. This is because parameter does not work well with Auto Plugins. Use instead. sbt 0.12 style key dependency operators <<= , <+= , <++= are removed. Please migrate to :=, +=, and ++=. These operators have been sources of confusion for many users, and have long been removed from 0.13 docs, and have been formally deprecated since sbt 0.13.13.

, , are removed. Please migrate to :=, +=, and ++=. These operators have been sources of confusion for many users, and have long been removed from 0.13 docs, and have been formally deprecated since sbt 0.13.13. Non-auto sbt.Plugin trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other.

trait is dropped. Please migrate to AutoPlugin. Auto plugins are easier to configure, and work better with each other. Removes the settingsSets method from Project (along with add/setSbtFiles ).

method from (along with ). Drops deprecated InputTask apply method and inputTask DSL method. Use Def.inputTask and Def.spaceDelimited().parsed .

method and DSL method. Use and . Drops deprecated ProjectReference implicit lifts. Use RootProject(<uri>) , RootProject(<file>) or LocalProject(<string>) .

implicit lifts. Use , or . Drops deprecated seq(..) DSL method. Use Seq or pass in the settings without wrapping.

DSL method. Use or pass in the settings without wrapping. Drops deprecated File / Seq[File] setting enrichments. Use .value and Def.setting .

/ setting enrichments. Use and . Drops deprecated SubProcess apply overload. Use SubProcess(ForkOptions(runJVMOptions = ..)) .

overload. Use . Drops toError(opt: Option[String]): Unit (equivalent to opt foreach sys.error ); if used to wrap ScalaRun#run then the replacement is scalaRun.run(...).failed foreach (sys error _.getMessage)

Features

New incremental compiler called Zinc 1. Details below.

The interactive shell is adds network API. Details below.

Fixes

Fixes test content log not showing up. #3198/util#80 by @eed3si9n

Fixes confusing log about “Unable to parse”. lm#98 by @jvican

Fixes console task. zinc#295 by @dwijnand

task. zinc#295 by @dwijnand Fixes spurious recompilations when unrelated constructor changes. zinc#288 by @smarter

Fixes restligeist macro for old operators. #3218 by @eed3si9n

Fixes task caching of update task. #3233 by @eed3si9n

task. #3233 by @eed3si9n Fixes ncurses-JLine issue by updating to JLine 2.14.4. util#81 by @Rogach

Improvements

Scala Center contributed a Java-friendly Zinc API. This was a overhaul of the Zinc internal API for a good Scala integration with other build tools. zinc#304 by @jvican

Scala Center contributed a binary format for Zinc’s internal storage. See below

Scala Center contributed static validation of build.sbt . See below

. See below Library management API and parallel artifact download. See below.

The startup log level is dropped to -error in script mode using scalas . #840 by @eed3si9n

in script mode using . #840 by @eed3si9n Replace cross building support with sbt-doge. This allows builds with projects that have multiple different combinations of cross scala versions to be cross built correctly. The behaviour of ++ is changed so that it only updates the Scala version of projects that support that Scala version, but the Scala version can be post fixed with ! to force it to change for all projects. A -v argument has been added that prints verbose information about which projects are having their settings changed along with their cross scala versions. #2613 by @jroper

ivyLoggingLevel is dropped to UpdateLogging.Quiet when CI environment is detected. @eed3si9n

is dropped to when CI environment is detected. @eed3si9n Add logging of the name of the different build.sbt (matching *.sbt ) files used. #1911 by @valydia

(matching ) files used. #1911 by @valydia Add the ability to call aggregate for the current project inside a build sbt file. By @xuwei-k

for the current project inside a build sbt file. By @xuwei-k Add new global setting asciiGraphWidth that controls the maximum width of the ASCII graphs printed by commands like inspect tree . Default value corresponds to the previously hardcoded value of 40 characters. By @RomanIakovlev.

that controls the maximum width of the ASCII graphs printed by commands like . Default value corresponds to the previously hardcoded value of 40 characters. By @RomanIakovlev. Revamped documentation for Scopes, and added Scope Delegation. @eed3si9n

Ports sbt-cross-building’s ^ and ^^ commands for plugin cross building. See below.

and commands for plugin cross building. See below. Adds support for cross-versioned exclusions. #1518/lm#88 by @jvican

Adds new offline mode to the Ivy-based library management. lm#92 by @jvican

A number of features related to dependency locking. See below.

Improved eviction warning presentation. See below.

A better main class detection. zinc#287 by @smarter

For faster startup, sbt will use Java refection to discover autoImport . #3115 by @jvican

. #3115 by @jvican For faster startup, reuse the same global instance for parsing. #3115 by @jvican

Adds InteractionService from sbt-core-next to keep compatibility with sbt 0.13. #3182 by @eed3si9n

from sbt-core-next to keep compatibility with sbt 0.13. #3182 by @eed3si9n Adds new WatchService that abstracts PollingWatchService and Java NIO. io#47 by @Duhemm on behalf of The Scala Center.

that abstracts and Java NIO. io#47 by @Duhemm on behalf of The Scala Center. Adds variants of IO.copyFile and IO.copyDirectory that accept sbt.io.CopyOptions() . See below for details.

and that accept . See below for details. Path.directory and Path.contentOf are donated from sbt-native-packager io#38 by @muuki88

and are donated from sbt-native-packager io#38 by @muuki88 ApiDiff feature used to debug Zinc uses Scala implementation borrowed from Dotty. zinc#346 by @Krever

In Zinc internal, make ExtractAPI use perRunCaches. zinc#347 by @gheine

Internals

Adopted Scalafmt for formatting the source code using neo-scalafmt.

Scala Center contributed a redesign of the scripted test framework that has batch mode execution. Scripted now reuses the same sbt instance to run sbt tests, which reduces the CI build times by 50% #3151 by @jvican

sbt 1.0.0-M6 is built using sbt 1.0.0-M5. #3184 by @dwijnand

Details of major changes

Zinc 1: Class-based name hashing

A major improvement brought into Zinc 1.0 by Grzegorz Kossakowski (commissioned by Lightbend) is class-based name hashing, which will speed up the incremental compilation of Scala in large projects.

Zinc 1.0’s name hashing tracks your code dependendencies at the class level, instead of at the source file level. The GitHub issue sbt/sbt#1104 lists some comparisons of adding a method to an existing class in some projects:

ScalaTest AndHaveWord class: Before 49s, After 4s (12x) Specs2 OptionResultMatcher class: Before 48s, After 1s (48x) scala/scala Platform class: Before 59s, After 15s (3.9x) scala/scala MatchCodeGen class: Before 48s, After 17s (2.8x)

This depends on some factors such as how your classes are organized, but you can see 3x ~ 40x improvements. The reason for the speedup is because it compiles fewer source files than before by untangling the classes from source files. In the example adding a method to scala/scala’s Platform class, sbt 0.13’s name hashing used to compile 72 sources, but the new Zinc compiles 6 sources.

Zinc API changes

Java classes under the xsbti.compile package such as IncOptions hides the constructor. Use the factory method xsbti.compile.Foo.of(...) .

package such as hides the constructor. Use the factory method . Renames ivyScala: IvyScala key to scalaModuleInfo: ScalaModuleInfo .

key to . xsbti.Reporter#log(...) takes xsbti.Problem as the parameter. Call log(problem.position, problem.message, problem.severity) to delegate to the older log(...) .

takes as the parameter. Call to delegate to the older . xsbi.Maybe , xsbti.F0 , and sxbti.F1 are changed to corresponding Java 8 classes java.util.Optional , java.util.Supplier and java.util.Function .

, , and are changed to corresponding Java 8 classes , and . Removes unused “resident” option. zinc#345 by @lukeindykiewicz

sbt server: JSON API for tooling integration

sbt 1.0 includes server feature, which allows IDEs and other tools to query the build for settings, and invoke commands via a JSON API. Similar to the way that the interactive shell in sbt 0.13 is implemented with shell command, “server” is also just shell command that listens to both human input and network input. As a user, there should be minimal impact because of the server.

In March 2016, we rebooted the “server” feature to make it as small as possible. We worked in collaboration with JetBrains’ @jastice who works on IntelliJ’s sbt interface to narrow down the feature list. sbt 1.0 will not have all the things we originally wanted, but in the long term, we hope to see better integration between IDE and sbt ecosystem using this system. For example, IDEs will be able to issue the compile task and retrieve compiler warning as JSON events:

{"type":"xsbti.Problem","message":{"category":"","severity":"Warn","message":"a pure expression does nothing in statement position; you may be omitting necessary parentheses","position":{"line":2,"lineContent":" 1","offset":29,"pointer":2,"pointerSpace":" ","sourcePath":"/tmp/hello/Hello.scala","sourceFile":"file:/tmp/hello/Hello.scala"}},"level":"warn"}

Another related feature that was added is the bgRun task which, for example, enables a server process to be run in the background while you run tests against it.

Static validation of build.sbt

sbt 1.0 prohibits .value calls inside the bodies of if expressions and anonymous functions in a task, @sbtUnchecked annotation can be used to override the check.

The static validation also catches if you forget to call .value in a body of a task.

#3216 and #3225 by @jvican

Eviction warning presentation

sbt 1.0 improves the eviction warning presetation.

Before:

[warn] There may be incompatibilities among your library dependencies. [warn] Here are some of the libraries that were evicted: [warn] * com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0 [warn] Run 'evicted' to see detailed eviction warnings

After:

[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible: [warn] [warn] * com.typesafe.akka:akka-actor_2.12:2.5.0 is selected over 2.4.17 [warn] +- de.heikoseeberger:akka-log4j_2.12:1.4.0 (depends on 2.5.0) [warn] +- com.typesafe.akka:akka-parsing_2.12:10.0.6 (depends on 2.4.17) [warn] +- com.typesafe.akka:akka-stream_2.12:2.4.17 () (depends on 2.4.17) [warn] [warn] Run 'evicted' to see detailed eviction warnings

#3202 by @eed3si9n

@jrudolph’s sbt-cross-building is a plugin author’s plugin. It adds cross command ^ and sbtVersion switch command ^^ , similar to + and ++ , but for switching between multiple sbt versions across major versions. sbt 0.13.16 merges these commands into sbt because the feature it provides is useful as we migrate plugins to sbt 1.0.

To switch the sbtVersion in pluginCrossBuild from the shell use:

^^ 1.0.0-M5

Your plugin will now build with sbt 1.0.0-M5 (and its Scala version 2.12.2).

If you need to make changes specific to a sbt version, you can now include them into src/main/scala-sbt-0.13 , and src/main/scala-sbt-1.0.0-M5 , where the binary sbt version number is used as postfix.

To run a command across multiple sbt versions, set:

crossSbtVersions := Vector("0.13.15", "1.0.0-M5")

Then, run:

^ compile

#3133 by @eed3si9n (forward ported from 0.13.16-M1)

CopyOptions

sbt IO 1.0 add variant of IO.copyFile and IO.copyDirectory that accept sbt.io.CopyOptions() . CopyOptions() is an example of pseudo case class similar to the builder pattern.

import sbt.io.{ IO, CopyOptions } IO.copyDirectory(source, target) // The above is same as the following IO.copyDirectory(source, target, CopyOptions() .withOverwrite(false) .withPreserveLastModified(true) .withPreserveExecutable(true))

io#53 by @dwijnand

Library management API and parallel artifact download

sbt 1.0 adds Library management API co-authored by Eugene Yokota (@eed3si9n) from Lightbend and Martin Duhem (@Duhemm) from Scala Center. This API aims to abstract Apache Ivy as well as alternative dependency resolution engines Ivy, cached resolution, and Coursier.

Parallel artifact download for Ivy engine was contributed by Jorge (@jvican) from Scala Center. It also introduces Gigahorse OkHttp as the Network API, and it uses Square OkHttp for artifact download as well.

lm#124 by @eed3si9n/@Duhemm, lm#90 by @jvican/@jsuereth and lm#104 by @eed3si9n.

Binary format for Zinc’s internal storage

Jorge (@jvican) from Scala Center contributed a binary format for Zinc’s internal storage using Google Procol Buffer. The new format provides us with three main advantages:

Backwards and forwards binary compatibility at the analysis format level. Faster (1.5 ~ 2x) serialization/deserialization of the analysis file. Provides a better way to make the analysis file machine-independent.

zinc#351 by @jvican

Dependency locking

Dependency locking feature is still in progress, but Jorge (@jvican) from Scala Center has added a number of related features that would should work together to allow dependency locking.

Frozen mode to the Ivy-based library management, which makes sure that the resolution is always intransitive. lm#100

Adds support to specify a resolver for dependencies. lm#97

Adds “managed checksums”, which tells Ivy to skip the checksum process. lm#111

Contributors

Too many people to thank here. See Credits