2015-10-26 2 views
0

Я работаю с sbt 0.13.8 и sbt-native-packager 1.0.3.Расширение «универсальной» конфигурации в sbt-native-packager

Я бы хотел создать конфигурацию для разработки и производства с различными вариантами java. Идея заключается в создании пакета tarball через UniversalPluguin от sbt-native-packager : "universal:packageZipTarball". Я также использую архетип «JavaServerAppPackaging».

Я попробовал этот Build.scala:

import sbt._ 
import Keys._ 
import com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport._ 
import com.typesafe.sbt.packager.archetypes.JavaServerAppPackaging 

object Build extends Build { 

    lazy val commonSettings: Seq[Setting[_]] = Seq(
    scalaVersion := "2.11.7", 
    crossScalaVersions := Seq("2.11.7"), 
    scalacOptions in Compile ++= Seq("-unchecked", "-feature", "-language:postfixOps", "-deprecation") 
) 

    lazy val devConfig = config("dev") extend Universal 
    lazy val prodConfig = config("prod") extend Universal 

    lazy val root = (project in file(".")) 
    .settings(commonSettings : _*) 
    .enablePlugins(JavaServerAppPackaging) 
    .configs(devConfig, prodConfig) 
    .settings(
     javaOptions in devConfig ++= Seq(
     // -J params will be added as jvm parameters 
     "-J-Xmx384m", 
     "-J-Xss512k"), 
     javaOptions in prodConfig ++= Seq(
     // -J params will be added as jvm parameters 
     "-J-Xmx384m", 
     "-J-Xss740k") 
    ) 
} 

С этой установкой, SBT держит неудачу с:

Error:Error while importing SBT project: 
... 
at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1310) 
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) 
at sbt.std.Transform$$anon$4.work(System.scala:63) 
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) 
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) 
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) 
at sbt.Execute.work(Execute.scala:235) 
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) 
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) 
at sbtConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159) 
at sbt.CompletionService$$anon$2.call(CompletionService.scala:28) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
[error] java.text.ParseException: unknown configuration 'universal'. It is extended by dev in null 
[error] Use 'last' for the full log. 

See complete log in /Users/ivan/Library/Logs/IdeaIC14/sbt.last.log 

я за идеей создания два упакованных тарболла для развития с командой SBT "dev:packageZipTarball », а для производства с« prod:packageZipTarball »с различными вариантами jvm.

Любые идеи, почему я не могу расширить конфигурацию «universal» с пользовательскими конфигурациями для достижения этого или альтернативы этому подходу?

ответ

2

Я настоятельно рекомендую не использовать конфигураций. Поведение не является ожидаемым. Лучшим способом достижения различных конфигураций сборки является создание подмодулей для каждой конфигурации.

См. this answer, в котором более подробно объясняется, как создавать подпроекты с различными конфигурациями.

+0

Отличный совет !. Теперь я могу выполнить 'dev/universal: packageZipTarball' или' prod/universal: packageZipTarball', и он работает как шарм. Спасибо @Muki –

+0

В моем случае у меня сложное приложение, состоящее из 75 модулей и много старого кода, который я не могу легко разделить на отдельные модули. В моем случае я должен найти способ заставить его работать как-то. Итак, несмотря на ваши аргументы и рекомендации, они имеют большой смысл, они не могут помочь в моем случае. –

+0

Конечно, вы можете использовать области конфигурации, но они менее интуитивно понятны и сложнее отлаживать. – Muki

Смежные вопросы