sbt-assembly icon indicating copy to clipboard operation
sbt-assembly copied to clipboard

Scala library exclusion doesn't work with Scala 3

Open sangamon opened this issue 1 year ago • 0 comments

It looks like neither assembleArtifact := false nor _.withIncludeScala(false) have any effect in Scala 3 projects.

To reproduce, I created a Scala 3 project from scratch via sbt new scala/scala3.g8. (Currently, this yields scala3Version = "3.5.2" and sbt.version=1.10.5.) I create a project/plugins.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.3.0")

Adding either

assemblyPackageScala / assembleArtifact := false,

or

assembly / assemblyOption ~= {
      _.withIncludeScala(false)
    },

to the project settings, as described in the docs, doesn't seem to have any effect:

$ sbt clean assembly && jar tfv target/scala-3.5.2/sbtass-assembly-0.1.0-SNAPSHOT.jar | grep 'scala/' | head
[info] welcome to sbt 1.10.5 (Eclipse Adoptium Java 21.0.1)
[...]
[info] Built: [...]/target/scala-3.5.2/sbtass-assembly-0.1.0-SNAPSHOT.jar
[...]
     0 Fri Jan 01 00:00:00 CET 2010 scala/
  1227 Fri Jan 01 00:00:00 CET 2010 scala/$times$colon$.class
  1380 Fri Jan 01 00:00:00 CET 2010 scala/$times$colon.class
  1512 Fri Jan 01 00:00:00 CET 2010 scala/$times$colon.tasty
  3679 Fri Jan 01 00:00:00 CET 2010 scala/CanEqual$.class
  [...]

Explicitly filtering files whose path starts with "scala" works, though, so assembly config options seem to be picked up:

assembly / assemblyMergeStrategy := {
  case PathList(ps @ _*) if ps.headOption == Some("scala") => MergeStrategy.discard
  case x =>
    val oldStrategy = (ThisBuild / assemblyMergeStrategy).value
    oldStrategy(x)
}

sangamon avatar Nov 26 '24 12:11 sangamon