sbt-big


License

License

GroupId

GroupId

com.geirsson
ArtifactId

ArtifactId

sbt-big
Last Version

Last Version

1.1.1
Release Date

Release Date

Type

Type

jar
Description

Description

sbt-big
sbt-big
Project URL

Project URL

https://github.com/scalameta/metadoc
Project Organization

Project Organization

com.geirsson
Source Code Management

Source Code Management

https://github.com/olafurpg/sbt-big

Download sbt-big

How to add to project

<!-- https://jarcasting.com/artifacts/com.geirsson/sbt-big/ -->
<dependency>
    <groupId>com.geirsson</groupId>
    <artifactId>sbt-big</artifactId>
    <version>1.1.1</version>
</dependency>
// https://jarcasting.com/artifacts/com.geirsson/sbt-big/
implementation 'com.geirsson:sbt-big:1.1.1'
// https://jarcasting.com/artifacts/com.geirsson/sbt-big/
implementation ("com.geirsson:sbt-big:1.1.1")
'com.geirsson:sbt-big:jar:1.1.1'
<dependency org="com.geirsson" name="sbt-big" rev="1.1.1">
  <artifact name="sbt-big" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.geirsson', module='sbt-big', version='1.1.1')
)
libraryDependencies += "com.geirsson" % "sbt-big" % "1.1.1"
[com.geirsson/sbt-big "1.1.1"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

sbt-big: faster and more stable sbt

This project is a proposal to create a new module in sbt/sbt called sbt-big that is a fat jar with all sbt dependencies shaded under an internal namespace. By updating the sbt launcher to use org.scala-sbt:sbt-big instead of org.scala-sbt:sbt, we gain

  • faster startup time, by making the launcher download 1 fat jar containing all dependencies instead of resolving and downloading 71 jars for dependencies. This speedup should be particularly noticable in clean CI and docker environments and from locations with high latency such as Asia or Australia.
  • more stable binary compatibility, by shading sbt dependencies under the sbt.internal.* package so that sbt plugins don't conflict with the sbt boot classpath. See sbt/zinc#546 for an example issue. By using sbt-big, the sbt project is safe to upgrade to the latest versions of its dependencies without breaking the sbt plugin ecosystem.

To try out sbt-big locally,

git clone https://github.com/olafurpg/sbt-big.git
cd sbt-big
sbt publishM2

What happens during publish is that:

  • sbt-assembly includes the full dependency tree of sbt
$ du -h $HOME/.m2/repository/org/scala-sbt/sbt-big/1.1.0/sbt-big-1.1.0.jar
 21M    /Users/ollie/.m2/repository/org/scala-sbt/sbt-big/1.1.0/sbt-big-1.1.0.jar
  • the published artifact contains 0 dependencies
$ cat $HOME/.m2/repository/org/scala-sbt/sbt-big/1.1.0/sbt-big-1.1.0.pom/sbt-big-1.1.0.pom | grep dependencies
<dependencies>
  <!--the dependency that was here has been absorbed via sbt-assembly-->
  <!--the dependency that was here has been absorbed via sbt-assembly-->
</dependencies>
  • the fastparse dependency has been shaded into the sbt.internal.fastparse package
$ jar tf $HOME/.m2/repository/org/scala-sbt/sbt-big/1.1.0/sbt-big-1.1.0.jar | grep fastparse | head
sbt/internal/fastparse/
sbt/internal/fastparse/core/
sbt/internal/fastparse/parsers/
sbt/internal/fastparse/utils/
...
com.geirsson
Developer tooling for Scala

Versions

Version
1.1.1