2017-05-10 38 views
0

我正尝试在SBT Native Packager的帮助下创建带有不同配置文件的构建。我有斯卡拉项目标准的项目布局:SBT Native Packager:使用不同的配置构建相同的包

my-app 
--/project 
----/build.properties 
----/plugins.sbt 
--/src 
----/main 
------/java 
------/resources 
------/scala 
----/test 
------/java 
------/resources 
------/scala 
build.sbt 

所以我加了SBT-本机打包插件到我的项目,并决定重复SBT submodule approach

这就是我的build.sbt文件看起来像:

import sbt.Keys._ 

scalaVersion in ThisBuild := "2.12.1" 

lazy val app = project 
    .in(file(".")) 
    .settings(
    name := "backend", 
    version := "1.0", 
    libraryDependencies ++= { 
     val akkaVersion = "2.4.17" 
     val akkaHttpVersion = "10.0.5" 
     Seq(
     "com.typesafe.akka" %% "akka-actor" % akkaVersion, 
     "com.typesafe.akka" %% "akka-http" % akkaHttpVersion, 
     "com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion 
    ) 
    } 
) 

lazy val devPackage = project 
    .in(file("build/dev")) 
    .enablePlugins(JavaAppPackaging) 
    .settings(
    name := "backend-dev", 
    resourceDirectory in Compile := (resourceDirectory in (app, Compile)).value, 
    mappings in Universal += { 
     ((resourceDirectory in Compile).value/"dev.conf") -> "conf/application.conf" 
    } 
) 
    .dependsOn(app) 

这里是application.conf和dev.conf(均放在src /主/资源:

akka { 
    loglevel = INFO 
    stdout-loglevel = INFO 
    loggers = ["akka.event.slf4j.Slf4jLogger"] 
    default-dispatcher { 
    fork-join-executor { 
     parallelism-min = 8 
    } 
    } 
    http { 
    server { 
     server-header = "PinPoint REST API" 
     request-timeout = "10.seconds" 
    } 
    } 
} 

database { 
    dataSourceClass = "org.postgresql.ds.PGSimpleDataSource" 
    properties = { 
    databaseName = "pg_db" 
    user = "alex" 
    password = "" 
    } 
    numThreads = 10 
} 

include "application" 

database { 
    dataSourceClass = "org.postgresql.ds.PGSimpleDataSource" 
    properties = { 
    databaseName = "pg_db_dev" 
    user = "alex" 
    password = "secure_password" 
    } 
    numThreads = 10 
} 

我运行在终端sbt devPackage/stage后,我得到了根folde新目录“打造”该项目的r。但在里面: build/dev/target/universal/stage/ 没有带可运行sh脚本的“bin”文件夹。

那么如何解决这个问题呢?

+0

如果你有不同的主类,那么你需要指定其中一个像mainClass在编译:=一些(“foo.bar 。主要”)。有关更多详细信息,请参阅http://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/。 – kardapoltsev

+0

@kardapoltsev我只有一个主类 –

回答

4

如果未设置mainClass设置,并且sbt不会从您的类路径中的jar文件自动为您设置,Universal Packager将不会创建启动脚本。

所有你需要做的是设置添加到您的devPackage项目:

lazy val devPackage = project 
    .in(file("build/dev")) 
    .enablePlugins(JavaAppPackaging) 
    .settings(
    name := "backend-dev", 
    resourceDirectory in Compile := (resourceDirectory in (app, Compile)).value, 
    // TODO: Use real classname here: 
    mainClass in Compile := Some("my.main.ClassName"), 
    mappings in Universal += { 
     ((resourceDirectory in Compile).value/"dev.conf") -> "conf/application.conf" 
    } 
) 
    .dependsOn(app) 
相关问题