Scala Sbt具有commons的多个项目

Scala Sbt具有commons的多个项目,scala,sbt,Scala,Sbt,我有一个项目,有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) DOCK

我有一个项目,有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时,它不包括添加的公共文件。我该怎么做?我应该在每个项目中更改build.sbt文件中的任何内容吗?

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


编辑:“聚合”对于在每个子模块上运行测试非常有用,例如,在根项目上运行“sbt清理测试”

情况不同。例如,当我想更新我的项目时,我要做的就是在根文件夹中进行sbt更新,这将调用我子文件夹中的所有sbt更新。问题在于dependsOn是在根文件夹中指定的,我应该在项目文件夹中指定,因为docker.OK。aggregate和dependsOn都是累积的,所以您可以尝试类似的方法:lazy val root=(文件中的项目(“.”)。dependsOn(P1,P2,P3,P4)。aggregate(P1,Commons,P2,P3,P4)。但这并不能解决我在项目P1中有dockerfile的问题,并且在该项目配置(build.sbt文件)中没有指定Commons文件夹。所以docker不知道它是否应该包含commons文件夹。你在使用哪些插件?如何运行构建?你尝试过类似“sbt P1/docker”的东西吗?我正在docker中使用它,我已经更新了我的问题。我不知道,我应该如何在dockerfile中包含这个公共文件