Docker:只在构build阶段安装Maven依赖关系?

对于Docker来说还是一个新东西,并试图让Jetty web服务在容器中运行。 这是我目前的docker文件

食谱

FROM maven:3.3-jdk-8-alpine # Install packages # To find packages to install see - https://pkgs.alpinelinux.org/packages RUN apk add --no-cache curl tar bash wget apache-ant RUN apk info # Do any Maven configuration ENV MAVEN_HOME /usr/share/maven VOLUME "$USER_HOME_DIR/.m2" ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2" # Copy over project source files to the /tmp folder COPY . /tmp/project WORKDIR /tmp/project # Preinstall any Maven depencencies RUN mvn install -pl '!deb' -DskipTests # Default command when running the docker image, can be overriden CMD cd webapp/ && mvn jetty:run 

在docker build期间,我指定了maven install来安装项目的所有依赖关系,并从源码为每个模块构buildjar。

然而,当然后运行docker容器,它仍然试图重新安装所有的依赖关系,然后失败,因为它找不到我的api.jar文件

我的项目结构是这样的

项目结构服务

  • API
  • LIB
  • Web应用程序
  • 的pom.xml

错误

以下工件无法parsing:com.foo.service:service-api:jar:1.14-SNAPSHOT

在一个容器外面做同样的步骤工作正常,docker服务开始好。 任何想法如何解决?

SNAPSHOT依赖关系由Maven定期检查更新 – 默认情况下是每天更新。 但是你可以在Maven的settings.xml中禁用它。 请参阅https://stackoverflow.com/a/3942048/2235015以获得类似(但是反转)的回答,并参阅http://maven.apache.org/ref/3.2.2/maven-settings/settings。 HTML (searchupdatePolicy )。

您的settings.xml示例存储库settings.xml

 <repository> <id>snapshots</id> <url>http://host/nexus/repos/snapshots</url> <snapshots> <updatePolicy>never</updatePolicy> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </repository>