Sbt construye el archivo .war con configuración/perfil personalizado.
Tengo un proyecto sbt con una configuración de entorno personalizada.
val Prod = config("prod") extend Compile describedAs "Alcance para construir paquetes de producción."
val Stage = config("stage") extend Compile describedAs "Alcance para construir paquetes de etapa."
val Local = config("local") extend Compile describedAs "Alcance para construir paquetes locales."
lazy val root = (project in file("."))
.configs(Prod, Stage, Local)
.enablePlugins(WarPlugin)
.settings(
name := "pet",
dependencySettings
).
settings(inConfig(Prod)(Classpaths.configSettings ++
Defaults.configTasks ++ Defaults.resourceConfigPaths ++ Seq(
unmanagedResourceDirectories += {baseDirectory.value / "src" / "main" / configuration.value.name / "resources"}
)): _*).
settings(inConfig(Stage)(Classpaths.configSettings ++
Defaults.configTasks ++ Defaults.resourceConfigPaths ++ Seq(
unmanagedResourceDirectories += {baseDirectory.value / "src" / "main" / configuration.value.name / "resources"}
)): _*).
settings(inConfig(Local)(Classpaths.configSettings ++
Defaults.configTasks ++ Defaults.resourceConfigPaths ++ Seq(
unmanagedResourceDirectories += {baseDirectory.value / "src" / "main" / configuration.value.name / "resources"}
)): _*)
Entonces, cuando ejecuto el comando sbt Local/compile
o sbt Local/run
, veo en el directorio de destino mis clases compiladas con mi configuración Local.
Luego agrego el complemento xsbt-web-plugin para empaquetar el archivo .war
.
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "4.2.4")
Y en build.sbt
enablePlugins(WarPlugin)
Ahora intento ejecutar el comando sbt Local/package
y solo obtengo un archivo .jar
, pero no un archivo .war
.
Si ejecuto el comando sbt package
, obtengo archivos .jar
y .war
, pero sin mi configuración Local.
Ayúdame, por favor. ¿Cómo puedo hacer que sbt Local/package
funcione correctamente?
O tal vez conoces alguna otra forma de construir un archivo .war
con sbt.
davy.ai
Para hacer que
sbt Local/package
funcione correctamente con el complementoxsbt-web-plugin
, necesitas agregarWebPlugin.autoImport.webSettings
a tu archivobuild.sbt
. Aquí tienes una versión actualizada de tu archivobuild.sbt
:Al agregar
WebPlugin.autoImport.webSettings
a cada configuración, habilitarás el empaquetado de archivos.war
para cada configuración. Ahora, cuando ejecutessbt Local/package
, deberías ver tu archivo.war
en el directoriotarget/scala-2.12
.Alternativamente, también puedes usar el complemento
sbt-assembly
para construir un archivo.war
. Aquí tienes un ejemplo de configuración del archivobuild.sbt
parasbt-assembly
:Al agregar el complemento
sbt-assembly
y las configuracionesassemblySettings
a cada configuración, habilitarás el empaquetado de archivos.war
para cada configuración. Ahora, cuando ejecutessbt Local/assembly
, deberías ver tu archivo.war
en el directoriotarget/scala-2.12
.Ten en cuenta que, por defecto, el complemento
sbt-assembly
no incluye las bibliotecas de Scala en el artefacto empaquetado. Para incluir las bibliotecas de Scala, puedes establecerincludeScala := true
en las configuracionesassemblyOptions
. Sin embargo, esto puede aumentar significativamente el tamaño del artefacto empaquetado.