Open netknight opened 8 years ago
That's correct. The feature is implemented in the JavaApp Archetype.
You would need to generalize this method with some like this
def appendJvmOptions(config: Configuration): Setting[_] = {
mappings in config := {
val originalMappings = (mappings in config).value
bashScriptConfigLocation.value.collect {
// generate the application.ini when constraints are okay
}.getOrElse(originalMappings)
}
}
Not sure if the sbt syntax works, but this is how it could look like. Then you could do something like this in the java app archetype:
appendJvmOptions(Universal),
appendJvmOptions(Docker),
appendJvmOptions(Rpm),
appendJvmOptions(Debian)
May be better option is to extend this functionality in JavaServerApp?
Not necessarily. It's just that the creation of the application.ini
from the javaOptions
must be more generic. The JavaServerApp
archetype adds the etc-default
customization option.
Update: This feature has moved to the BashStartScriptPlugin
This is a highly needed feature. Because: To make Play Framework applications work nicely with Docker, you usually have to set
javaOptions in Universal ++= Seq(
"-Dpidfile.path=/dev/null"
)
As it seems many people are effected by this. Now, if I want to use sbt-native-packager to also publish deb packages, that sucks, because I obviously don't want to apply that above pid workaround for my debian package.
Another thing:
Does even javaOptions in Linux
work? Look at the source, here you pass javaOptions in Universal
to generateApplicationIni
:
https://github.com/sbt/sbt-native-packager/blob/4b7d91739c5409f3b9578232aeb30a320cf8f42c/src/main/scala/com/typesafe/sbt/packager/archetypes/scripts/BashStartScriptPlugin.scala#L69-L75
No mention of javaOptions in Linux
... I am not an sbt expert, but how does that work if I set javaOptions in Linux
? Will such linux javaOptions merged into the universal javaOptions? (Again I am not an sbt expert).
I see you added a test for javaOptions in Linux
, however this just reads the value
https://github.com/sbt/sbt-native-packager/blob/4b7d91739c5409f3b9578232aeb30a320cf8f42c/src/sbt-test/universal/application-ini-from-javaoptions/build.sbt#L12-L15
to compare it with what was set by javaOptions in Universal
a couple of lines above:
https://github.com/sbt/sbt-native-packager/blob/4b7d91739c5409f3b9578232aeb30a320cf8f42c/src/sbt-test/universal/application-ini-from-javaoptions/build.sbt#L7
Note - also here I can just see how the Linux settings gets set to the Universal ones by default, but I can not find out how this Linux javaOptions will be used later:
https://github.com/sbt/sbt-native-packager/blob/4b7d91739c5409f3b9578232aeb30a320cf8f42c/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala#L50-L51
Correcting my own comment after I finally skimmed through the whole documentation:
Now, if I want to use sbt-native-packager to also publish deb packages, that sucks, because I obviously don't want to apply that above pid workaround for my debian package.
The docs actually describe exactly this cited use case: "Build the same package with different configs". I guess the sub modules approach is the way to go and makes this feature request less urgent.
Thanks @mkurz for all the research :hugs: This is some pretty old code and not necessarily the state-of-the-art sbt craftmanship :wink:
Now, if I want to use sbt-native-packager to also publish deb packages, that sucks, because I obviously don't want to apply that above pid workaround for my debian package.
I actually would recommend that :smile: My personal experience is that using the SystemLoaders
(systemd, systemv, upstart) is a better option then letting play handle its lifecycle.
No mention of
javaOptions in Linux
... I am not an sbt expert, but how does that work if I setjavaOptions in Linux
? Will such linuxjavaOptions
merged into the universal javaOptions`?
There's no merging going on AFAIK. Actually I have no clue how this works. Couldn't find any trace of javaOptions
. So... don't know.
I've using native-packager for docker image creation. So the problem is next: Currently I could specify:
But this this will be applied for all packaging types (Docker, RPM, DEB, etc).
I would like to specify docker-only javaOptions but this is impossible now because
javaOptions in Docker := ...
is ignored (checked with sbt inspect).