Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package scala.build.options
import scala.build.internal.Constants

final case class PackageOptions(
standalone: Option[Boolean] = None,
version: Option[String] = None,
launcherApp: Option[String] = None,
maintainer: Option[String] = None,
Expand All @@ -24,6 +25,9 @@ final case class PackageOptions(

def isDockerEnabled: Boolean = dockerOptions.isDockerEnabled.getOrElse(false)

// default behaviour for building docker image is building standalone JARs
def isStandalone: Boolean = standalone.getOrElse(isDockerEnabled)

}

object PackageOptions {
Expand Down
15 changes: 11 additions & 4 deletions modules/cli/src/main/scala/scala/cli/commands/Package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -392,10 +392,17 @@ object Package extends ScalaCommand[PackageOptions] {
val tmpJarContent = os.read.bytes(os.Path(tmpJar))
Files.deleteIfExists(tmpJar)

def dependencyEntries = build.artifacts.artifacts.map {
case (url, _) =>
ClassPathEntry.Url(url)
}
def dependencyEntries =
build.artifacts.artifacts.map {
case (url, artifactPath) =>
if (build.options.packageOptions.isStandalone) {
val path = os.Path(artifactPath)
ClassPathEntry.Resource(path.last, os.mtime(path), os.read.bytes(path))
}
else {
ClassPathEntry.Url(url)
}
}
val byteCodeEntry = ClassPathEntry.Resource(s"${destPath.last}-content.jar", 0L, tmpJarContent)

val allEntries = Seq(byteCodeEntry) ++ dependencyEntries
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ final case class PackageOptions(
@Group("Package")
@HelpMessage("Generate an assembly JAR")
assembly: Boolean = false,

@Group("Package")
@HelpMessage("Package standalone JARs")
standalone: Option[Boolean] = None,
@Recurse
packager: PackagerOptions = PackagerOptions(),
@Group("Package")
Expand Down Expand Up @@ -71,6 +73,7 @@ final case class PackageOptions(
baseOptions.copy(
mainClass = mainClass.mainClass.filter(_.nonEmpty),
packageOptions = baseOptions.packageOptions.copy(
standalone = standalone,
version = Some(packager.version),
launcherApp = packager.launcherApp,
maintainer = packager.maintainer,
Expand Down
4 changes: 4 additions & 0 deletions website/docs/reference/cli-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,10 @@ Generate a library JAR rather than an executable JAR

Generate an assembly JAR

#### `--standalone`

Package standalone JARs

#### `--deb`

Build debian package, available only on linux
Expand Down