2017-05-10 15 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을 반복하기로 결정했다 : 나는 스칼라 프로젝트에 대한 표준 프로젝트 레이아웃을 가지고있다.

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 
} 

를 실행 한 다음, 여기에

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) 

그리고이 (모두 SRC/메인/자원에 있습니다 application.conf 및 dev.conf 있습니다 : 내 build.sbt 파일과 같은 방법

내가 터미널에서 sbt devPackage/stage를 실행 한 후

include "application" 

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

나는 루트 folde에 새로운 디렉토리 "빌드"를 얻을 프로젝트의 r. 그러나 내부 : build/dev/target/universal/stage/ 실행 가능한 sh 스크립트가있는 "bin"폴더가 없습니다.

어떻게 해결할 수 있습니까?

+0

: 일부 ("foo.bar를 =

당신이해야 할 모든 당신의 devPackage 프로젝트에 설정을 추가입니다 .본관"). 자세한 내용은 http://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/를 참조하십시오. – kardapoltsev

+0

@ kardapoltsev 전 메인 클래스가 하나뿐입니다. –

답변

4

mainClass 설정이 지정되어 있지 않은 경우 Universal Packager가 시작 스크립트를 만들지 않으며 sbt이 클래스 경로의 jar 파일에서 자동 설정되지 않습니다. 그런 다음 다른 주요 클래스를 컴파일에서 mainClass처럼 중 하나를 지정해야하는 경우

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)