当前位置: 首页 > 知识库问答 >
问题:

SBT本机打包程序:用不同的配置构建相同的包

祁飞翰
2023-03-14

我正在尝试用不同的配置文件在SBT本机打包器的帮助下创建构建。我有一个Scala项目的标准项目布局:

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

所以我将sbt-native-packager插件添加到我的项目中,并决定重复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)
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
}

那么如何修复这个呢?

共有1个答案

司徒啸
2023-03-14

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

您只需将设置添加到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)
 类似资料:
  • 我正在构建一个具有多种不同风格的应用程序。我的问题是,如果我为基于flavor的活动使用不同的代码,我是否需要在所有flavor directores中包含该代码的副本,或者如果我只将代码副本保留在app/src/main/java目录中,如果我不将其包含在flavor目录中,其他所有flavor是否会使用main/java中的文件。 我有 app/src/main/java/com/mycomp

  • 问题内容: 对于不同的配置文件,maven pom.xml文件中是否可能具有一组不同的依赖关系? 例如 我想在一个配置文件中选择一个不同的依赖项jar文件,该文件具有相同的类名和相同接口的不同实现。 问题答案: 在此引用Maven文档: 配置文件元素既包含可选激活(配置文件触发器),又包含如果已激活POM则要对POM进行的一组更改。例如,为测试环境构建的项目可能指向与最终部署不同的数据库。或者可以

  • vue项目打包,怎么实现不同环境配置不同的配置呢? 例如: 打包命令 npm run xxxx 可以进入‘xxx’处配置,执行自定义配置

  • 我试图打开两个实例ChromeDriver具有相同的配置文件如下: 问题是第一个驱动程序工作并导航到Google,但在第二个驱动程序中,我在实例化第二个驱动程序时遇到以下异常: 附加信息:抛出了一个带有空响应的异常,该异常向远程WebDriver服务器发送HTTP请求以获取URLhttp://localhost:6949/session.异常的状态为ReceiveFailure,消息为:基础连接已

  • SBT版本:0.13.11添加到plugins.SBT中:addSbtPlugin(“com.typesafe.SBT”%“sbt-native-packager”%“1.3.4”) 在build.sbt中,添加了以下内容:lazy val root=(project In file(“.”))。enablePlugins(DebianPlugin)