У меня есть задание, называемое assemblyServerAndClient, для создания внешнего интерфейса и внутреннего интерфейса, а после этого необходимо скопировать внешний интерфейс в папку ресурсов. Когда я запускаю gradle assembleServerAndClient
с --no-daemon
и запускаю флягу позже, код внешнего интерфейса может не присутствовать в фляге.
Dockerfile для сборки:
FROM gradle:jdk11 as builder
WORKDIR /home/gradle/src
USER root
COPY --chown=gradle:gradle ./ ./
RUN gradle assembleServerAndClient -s --no-daemon --console plain
RUN chown -R root:root ./
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
COPY --from=builder /home/gradle/src/server/build/libs/*-all.jar admanager.jar
EXPOSE 8080
CMD java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dcom.sun.management.jmxremote -noverify ${JAVA_OPTS} -jar admanager.jar
Задача Gradle:
copyClientResources.doFirst { //<2>
copy {
from project(':frontend').buildDir.absolutePath
into "${project(':server').buildDir}/resources/main/public"
}
}
Когда я распечатываю содержимое каталога до и после копирования, сборка внешнего интерфейса находится там, где она находится ожидается.
files { file(project(':frontend').buildDir.absolutePath).listFiles() }.each {
println "frontend $it"
}
[copy stuff]
files { file("${project(':server').buildDir}/resources/main/public").listFiles() }.each {
println "backend $it"
}
Отпечатки:
frontend /home/gradle/src/frontend/build/favicon.ico
frontend /home/gradle/src/frontend/build/manifest.json
frontend /home/gradle/src/frontend/build/index.html
frontend /home/gradle/src/frontend/build/precache-manifest.a70b151a07982defa3e904769864b44d.js
frontend /home/gradle/src/frontend/build/service-worker.js
frontend /home/gradle/src/frontend/build/asset-manifest.json
frontend /home/gradle/src/frontend/build/static
backend /home/gradle/src/server/build/resources/main/public/favicon.ico
backend /home/gradle/src/server/build/resources/main/public/manifest.json
backend /home/gradle/src/server/build/resources/main/public/index.html
backend /home/gradle/src/server/build/resources/main/public/precache-manifest.a70b151a07982defa3e904769864b44d.js
backend /home/gradle/src/server/build/resources/main/public/service-worker.js
backend /home/gradle/src/server/build/resources/main/public/asset-manifest.json
backend /home/gradle/src/server/build/resources/main/public/static
Когда я смотрю в банку, созданную без --no-daemon
, папка public
находится на верхнем уровне файла JAR. С опцией --no-daemon
его нет.