【问题标题】:Sbt multiple projects with commonsSbt 多个公共项目
【发布时间】:2019-11-15 20:09:27
【问题描述】:

我有一个包含 4 个模块和一个公共模块的项目,应该将它们添加到每个 jar 文件中。但是,它是在父模块的 build.sbt 中配置的

lazy val root = (project in file("."))
  .aggregate(P1, Commons, P2, P3, P4)

lazy val Commons = (project in file("commons"))

lazy val P1 = (project in file("p1"))
  .dependsOn(Commons)

DOCKERFILE:

FROM amazonlinux:2018.03 as build

ARG SCALA_VERSION
ARG SBT_VERSION
ARG JAVA_VERSION

RUN yum install -y java-${JAVA_VERSION}-openjdk-devel
RUN yum install -y https://downloads.lightbend.com/scala/${SCALA_VERSION}/scala-${SCALA_VERSION}.rpm
RUN yum install -y https://dl.bintray.com/sbt/rpm/sbt-${SBT_VERSION}.rpm

WORKDIR root/P1

ADD ./project/plugins.sbt project/
ADD ./project/build.properties project/
ADD build.sbt .
RUN sbt update

COPY . .

RUN sbt clean assembly

RUN cp target/scala-2.12/P1-assembly-1.0-SNAPSHOT.jar P1.jar

FROM openjdk:8-jre-alpine

COPY --from=build \
   root/P1/P1.jar .

ENTRYPOINT ["java", "-jar", "/P1.jar"]

但是,当我为 P1、P2、P3、P4 中的每一个创建 dockerfile 时,它​​不包括添加的 Commons。我该怎么做?我应该在每个项目的 build.sbt 文件中更改任何内容吗?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您可以尝试用“dependsOn”替换“聚合”吗? 聚合意味着您正在运行的任务也将在聚合项目上运行,这不是您所期望的。

    编辑:“聚合”对于在每个子模块上运行测试很有用,例如在根项目上运行“sbt clean test”时

    【讨论】:

    • 情况不同。例如,当我想更新我的项目时,我要做的就是在根文件夹中执行 sbt update,这将调用我的子文件夹中的所有内容。问题是在根文件夹中指定了dependsOn,由于docker,我应该在项目文件夹中指定它。
    • 好的。 aggregate 和 dependsOn 都是累积的,因此您可以尝试以下操作:lazy val root = (project in file(".")) .dependsOn(P1, P2, P3, P4) .aggregate(P1, Commons, P2, P3, P4)
    • 但这并不能解决我在项目 P1 中有 dockerfile 的问题,并且在该项目配置(build.sbt 文件)中没有指定 commons 文件夹。因此 docker 不知道它是否应该包含 commons 文件夹。
    • 您使用的是哪些插件?你如何运行你的构建?你有没有尝试过类似“sbt P1/docker”的东西?
    • 我在 docker 中使用它,我已经更新了我的问题。我不知道,我应该如何在 dockerfile 中包含这些公共资源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2015-12-12
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多