Skip to content

Commit 32efc76

Browse files
authored
Package standalone JARs (#139)
1 parent d324ee9 commit 32efc76

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

modules/build/src/main/scala/scala/build/options/PackageOptions.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scala.build.options
33
import scala.build.internal.Constants
44

55
final case class PackageOptions(
6+
standalone: Option[Boolean] = None,
67
version: Option[String] = None,
78
launcherApp: Option[String] = None,
89
maintainer: Option[String] = None,
@@ -24,6 +25,9 @@ final case class PackageOptions(
2425

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

28+
// default behaviour for building docker image is building standalone JARs
29+
def isStandalone: Boolean = standalone.getOrElse(isDockerEnabled)
30+
2731
}
2832

2933
object PackageOptions {

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,17 @@ object Package extends ScalaCommand[PackageOptions] {
392392
val tmpJarContent = os.read.bytes(os.Path(tmpJar))
393393
Files.deleteIfExists(tmpJar)
394394

395-
def dependencyEntries = build.artifacts.artifacts.map {
396-
case (url, _) =>
397-
ClassPathEntry.Url(url)
398-
}
395+
def dependencyEntries =
396+
build.artifacts.artifacts.map {
397+
case (url, artifactPath) =>
398+
if (build.options.packageOptions.isStandalone) {
399+
val path = os.Path(artifactPath)
400+
ClassPathEntry.Resource(path.last, os.mtime(path), os.read.bytes(path))
401+
}
402+
else {
403+
ClassPathEntry.Url(url)
404+
}
405+
}
399406
val byteCodeEntry = ClassPathEntry.Resource(s"${destPath.last}-content.jar", 0L, tmpJarContent)
400407

401408
val allEntries = Seq(byteCodeEntry) ++ dependencyEntries

modules/cli/src/main/scala/scala/cli/commands/PackageOptions.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ final case class PackageOptions(
3333
@Group("Package")
3434
@HelpMessage("Generate an assembly JAR")
3535
assembly: Boolean = false,
36-
36+
@Group("Package")
37+
@HelpMessage("Package standalone JARs")
38+
standalone: Option[Boolean] = None,
3739
@Recurse
3840
packager: PackagerOptions = PackagerOptions(),
3941
@Group("Package")
@@ -71,6 +73,7 @@ final case class PackageOptions(
7173
baseOptions.copy(
7274
mainClass = mainClass.mainClass.filter(_.nonEmpty),
7375
packageOptions = baseOptions.packageOptions.copy(
76+
standalone = standalone,
7477
version = Some(packager.version),
7578
launcherApp = packager.launcherApp,
7679
maintainer = packager.maintainer,

website/docs/reference/cli-options.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,10 @@ Generate a library JAR rather than an executable JAR
428428

429429
Generate an assembly JAR
430430

431+
#### `--standalone`
432+
433+
Package standalone JARs
434+
431435
#### `--deb`
432436

433437
Build debian package, available only on linux

0 commit comments

Comments
 (0)