Docker:仅在构建阶段安装Maven依赖项?

时间:2016-11-03 11:39:44

标签: java maven docker

仍然是Docker的新手,并尝试让Jetty webservice在容器内运行。 这是我目前的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构建期间,我指定maven install来安装项目的所有依赖项,并从源代码为每个模块构建jar。

但是当然后运行docker容器时,它仍然会尝试重新安装所有依赖项,然后失败,因为它无法找到我的api.jar文件

我的项目结构是这样的

项目结构 服务

  • api
  • LIB
  • web应用
  • 的pom.xml

错误

  

无法解决以下工件:   com.foo.service:服务API:罐:1.14-SNAPSHOT

在容器外执行相同的步骤工作正常,并且jetty服务启动正常。任何想法如何解决?

1 个答案:

答案 0 :(得分:4)

Maven定期检查SNAPSHOT依赖项的更新 - 默认情况下每天检查。但是你可以在你的settings.xml Maven中禁用它。请参阅https://stackoverflow.com/a/3942048/2235015获取类似(但反转)案例的答案,并查看http://maven.apache.org/ref/3.2.2/maven-settings/settings.html(搜索updatePolicy)。

settings.xml中的示例存储库设置:

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