如何从Docker中的SystemPath添加罐子



在我的maven pom文件中,我有一些依赖关系,这些依赖项是我们自己的其他项目中的jar文件,这些文件不在存储库中。我们使用了'system'范围的依赖性依赖项,例如

<dependency>
        <groupId>efaadmin</groupId>
        <artifactId>efaadmin</artifactId>
        <scope>system</scope>
        <version>1.0</version>
        <systemPath>
        ${basedir}srcmainwebappWEB-INFlibefaadmin.jar
        </systemPath>
</dependency>

现在写Dockerfile时,这些依赖性已成为我们的绊脚石。

#
# Build stage
#
FROM maven:3.6.1-jdk-8-slim AS BUILD
COPY src /home/app/src
COPY pom.xml /home/app
COPY jars/*.jar /home/app/jars/
RUN  mvn -f /home/app/pom.xml
#
# Package stage
#
FROM tomcat:7.0-jdk8-openjdk-slim
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
COPY --from=build /home/app/target/DrySign.war $CATALINA_HOME/webapps/ 
COPY --from=build /home/app/target/jars/* $CATALINA_HOME/webapps/xxxxx/WEB-INF/lib/
EXPOSE 8080
CMD ["catalina.sh", "run"]

但是Docker在抱怨:

'dependencies.dependency.systemPath' for efaadmin:efaadmin:jar must specify an absolute path but is ./jars/efaadmin.jar

如何处理?

这看起来不像Docker的问题,它看起来像是Maven的问题。Maven需要系统范围依赖性的绝对路径。您可以通过评论下面的Dockerfile的所有行来测试情况

...
RUN  mvn -f /home/app/pom.xml
# comment out everything below this, I think you'll still see the failure

顺便说一句,为什么您要使用systemPath的后斜线不向前斜线?您的Maven系统范围依赖性被解释为相对路径,而不是绝对路径。解决此问题时,您的构建应按预期工作。

我现在可以构建dockerfile。这是我修订的Dockerfile:

FROM maven:3.6.1-jdk-8-slim AS BUILD
COPY src /home/app/src
COPY pom.xml /home/app
COPY jars/*.jar /home/app/jars/
ENV JAR_HOME /home/app/jars
RUN  mvn -f /home/app/pom.xml clean install

FROM tomcat:7.0-jdk8-openjdk-slim
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
COPY --from=build /home/app/target/DrySign.war $CATALINA_HOME/webapps/ 
COPY --from=build /home/app/jars/*.jar $CATALINA_HOME/webapps/WEB-INF/lib/
EXPOSE 8080
CMD ["catalina.sh", "run"]

最新更新