sbt-native-image
sbt-assembly
Our great sponsors
sbt-native-image | sbt-assembly | |
---|---|---|
5 | 6 | |
245 | 1,932 | |
1.2% | 0.1% | |
3.4 | 6.6 | |
5 months ago | about 1 month ago | |
Scala | Scala | |
- | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sbt-native-image
-
Scala.js AWS Lambda, using Scala 3
Take a look at sbt-native-image or sbt-native-packager for building the native image.
-
GraalVM native-image with Scala 3 reflection hell
The reason seems to be Scala 3's new encoding for lazy vals, where a reflective access to a variable called bitmap takes place. To demonstrate this, I took the http4s g8 template, set it up with Scala 3.1.0, added sbt native-image, started the nativeImageRunAgent and ran a single request against GET /joke. After stopping the server, the native-image run agent generated the reflective configs that are required for this path of execution. Comparing the generated Scala 2.13 with the Scala 3 configs, yields a bloated version for Scala 3 that contains these additional rules:
-
Is Scala and Play Framework dying?
Sbt plugin: https://github.com/scalameta/sbt-native-image
-
Native Image Compilation for A Purely Functional Example Application
IIRC, the sbt-native-image plugin can abstract that away, too: https://github.com/scalameta/sbt-native-image#nativeimagerunagent https://github.com/scalameta/sbt-native-image
-
SBT error when running package application: java.lang.RuntimeException: No main class detected.
Assembly, however, has some disadvantages so you may also want to look into other alternatives like sbt-native-packager. You may even want to produce a binary using sbt-native-image (which uses GraalVM under the hood) so your users do not need to install anything at all, not even a JRE.
sbt-assembly
-
Trouble with sbt-native-packager
sbt-assembly is still my go-to. So what I'd prefer is the combination of sbt-assembly (to build my .jar that I can just java -jar anytime I want) and sbt-jib (to construct my OCI image including my assembly .jar for deployment in some container orchestration environment).
-
SBT error when running package application: java.lang.RuntimeException: No main class detected.
You may also use sbt-assembly to produce an uber JAR that embeds the Scala stdlib together with your code, which means that now for running your program you only need a JRE like java -jar app-assembly.jar. This option is great because now if you start adding dependencies to your project those are also included in this massive JAR.
-
Welcome to JAR Hell, Part 2: Deployment Strategies
Sbt-assembly defaults to silently concatenating configs. But even if it didn't, the configs wouldn't be in any particular order when resolving.
-
Building native images and compiling with GraalVM and sbt
With the sbt-assembly plugin you can create JAR-files with all of its dependencies (fat JARs). sbt assembly creates this target/scala-2.12/apply-at-vdb-assembly-0.1.0-SNAPSHOT.jar which has a size of around 42MB:
What are some alternatives?
sbt-native-packager - sbt Native Packager
coursier - Pure Scala Artifact Fetching
sbt-release - A release plugin for sbt
sbt-docker - Create Docker images directly from sbt
sbt-buildinfo - I know this because build.sbt knows this.
sbt-dependency-check - SBT Plugin for OWASP DependencyCheck. Monitor your dependencies and report if there are any publicly known vulnerabilities (e.g. CVEs). :rainbow:
sbt-pack - A sbt plugin for creating distributable Scala packages.
JMH - "Trust no one, bench everything." - sbt plugin for JMH (Java Microbenchmark Harness)
sbt-sonatype - A sbt plugin for publishing Scala/Java projects to the Maven central.
tut - doc/tutorial generator for scala
zio-microservice - ZIO-powered microservices via HTTP and other protocols.