File tree Expand file tree Collapse file tree 4 files changed +23
-5
lines changed
build/src/main/scala/scala/build/options
cli/src/main/scala/scala/cli/commands Expand file tree Collapse file tree 4 files changed +23
-5
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package scala.build.options
3
3
import scala .build .internal .Constants
4
4
5
5
final case class PackageOptions (
6
+ standalone : Option [Boolean ] = None ,
6
7
version : Option [String ] = None ,
7
8
launcherApp : Option [String ] = None ,
8
9
maintainer : Option [String ] = None ,
@@ -24,6 +25,9 @@ final case class PackageOptions(
24
25
25
26
def isDockerEnabled : Boolean = dockerOptions.isDockerEnabled.getOrElse(false )
26
27
28
+ // default behaviour for building docker image is building standalone JARs
29
+ def isStandalone : Boolean = standalone.getOrElse(isDockerEnabled)
30
+
27
31
}
28
32
29
33
object PackageOptions {
Original file line number Diff line number Diff line change @@ -392,10 +392,17 @@ object Package extends ScalaCommand[PackageOptions] {
392
392
val tmpJarContent = os.read.bytes(os.Path (tmpJar))
393
393
Files .deleteIfExists(tmpJar)
394
394
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
+ }
399
406
val byteCodeEntry = ClassPathEntry .Resource (s " ${destPath.last}-content.jar " , 0L , tmpJarContent)
400
407
401
408
val allEntries = Seq (byteCodeEntry) ++ dependencyEntries
Original file line number Diff line number Diff line change @@ -33,7 +33,9 @@ final case class PackageOptions(
33
33
@ Group (" Package" )
34
34
@ HelpMessage (" Generate an assembly JAR" )
35
35
assembly : Boolean = false ,
36
-
36
+ @ Group (" Package" )
37
+ @ HelpMessage (" Package standalone JARs" )
38
+ standalone : Option [Boolean ] = None ,
37
39
@ Recurse
38
40
packager : PackagerOptions = PackagerOptions (),
39
41
@ Group (" Package" )
@@ -71,6 +73,7 @@ final case class PackageOptions(
71
73
baseOptions.copy(
72
74
mainClass = mainClass.mainClass.filter(_.nonEmpty),
73
75
packageOptions = baseOptions.packageOptions.copy(
76
+ standalone = standalone,
74
77
version = Some (packager.version),
75
78
launcherApp = packager.launcherApp,
76
79
maintainer = packager.maintainer,
Original file line number Diff line number Diff line change @@ -428,6 +428,10 @@ Generate a library JAR rather than an executable JAR
428
428
429
429
Generate an assembly JAR
430
430
431
+ #### ` --standalone `
432
+
433
+ Package standalone JARs
434
+
431
435
#### ` --deb `
432
436
433
437
Build debian package, available only on linux
You can’t perform that action at this time.
0 commit comments