首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有docker sbt的多模块项目中未指定用于发布的存储库

在具有docker sbt的多模块项目中未指定用于发布的存储库
EN

Stack Overflow用户
提问于 2018-02-05 23:53:17
回答 1查看 818关注 0票数 3

我正在尝试使用sbt-docker插件部署一个多模块项目。我想为api和app模块创建单独的容器,并跳过其他模块。但是,每次运行docker: publish时,我都会收到这样的错误:

代码语言:javascript
复制
[error] (api/*:publishConfiguration) Repository for publishing is not specified.
[error] (app/*:publishConfiguration) Repository for publishing is not specified.

这是我的build.sbt文件:

代码语言:javascript
复制
import sbt.Keys.publishTo

name := "project-name"

val globalSettings = Seq[SettingsDefinition](
  version := "1.0",
  scalaVersion := "2.12.4"
)

enablePlugins(DockerPlugin)

//.. other modules

val app = Project("app", file("app"))
  .enablePlugins(DockerPlugin)
  .dependsOn(repositories)
  .settings(globalSettings: _*)
  .settings(
    libraryDependencies ++= Seq(
      "com.typesafe.akka" %% "akka-http" % "10.0.11",
      "com.typesafe.akka" %% "akka-http-testkit" % "10.0.11" % Test,
      "de.heikoseeberger" %% "akka-http-circe" % "1.18.0",
      "net.ruippeixotog" %% "scala-scraper" % "2.1.0"
    ),
    resolvers += Resolver.bintrayRepo("hseeberger", "maven")
  )
  .settings(assemblyJarName in assembly := "app.jar")
  .settings(dockerfile in docker := {
    val artifact: File = assembly.value
    val artifactTargetPath = s"/app/${artifact.name}"

    new Dockerfile {
      from("java")
      add(artifact, artifactTargetPath)
      entryPoint("java", "-jar", artifactTargetPath)
    }
  },
    imageNames in docker := Seq(ImageName(s"name/dru-app"))
  )

val api = Project("api", file("api"))
  .enablePlugins(DockerPlugin)
  .dependsOn(app)
  .settings(globalSettings: _*)
  .settings(
    libraryDependencies ++= Seq(
      "com.typesafe.akka" %% "akka-http" % "10.0.11",
      "com.typesafe.akka" %% "akka-http-testkit" % "10.0.11" % Test,
      "de.heikoseeberger" %% "akka-http-circe" % "1.18.0",
      "net.ruippeixotog" %% "scala-scraper" % "2.1.0"

    ),
    resolvers += Resolver.bintrayRepo("hseeberger", "maven")
  )
  .settings(assemblyJarName in assembly := "api.jar")
  .settings(dockerfile in docker := {
    val artifact: File = assembly.value
    val artifactTargetPath = s"/api/${artifact.name}"
    publishTo := Some(Resolver.file("Unused transient repository", file("https://hub.docker.com/r/name/dru-api")))

    new Dockerfile {
      from("java")
      add(artifact, artifactTargetPath)
      entryPoint("java", "-jar", artifactTargetPath)
    }
  },
    imageNames in docker := Seq(ImageName(s"name/dru-api"))
  )


val root = Project("DRU-W3-FP-1-Toloka-Parser", file("."))
  .aggregate(app, api)
  .settings(
    publish := {},
    publishLocal := {},
    publishArtifact := false,
    publishTo := Some(Resolver.file("Unused transient repository", file("target/unusedrepo")))
  )

我将非常感谢任何关于如何修复我的build.sbt文件发布到docker hub的建议!

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 23:41:22

我猜您的子项目appapi有两个不同的问题

1)在app中,您似乎缺少一个publishTo设置。根据official SBT docs的说法,我希望有一个。

2)在api中,有一个publishTo,但它是在块.settings(dockerfile in docker := {...})中定义的,因此该值不会返回/分配给子项目的设置。尝试从那里提取它,并像对root项目那样显式地设置.settings(publishTo := Some(Resolver.file("Unused transient repository"...)))

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48626415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档