如何在Docker中从系统路径添加jar

时间:2019-07-01 15:36:31

标签: maven docker dockerfile

在我的maven pom文件中,我有一些依赖关系,这些依赖关系是我们来自其他项目的jar文件,这些文件不在存储库中。我们使用了

<dependency>
        <groupId>efaadmin</groupId>
        <artifactId>efaadmin</artifactId>
        <scope>system</scope>
        <version>1.0</version>
        <systemPath>
        ${basedir}\src\main\webapp\WEB-INF\lib\efaadmin.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

如何处理?

2 个答案:

答案 0 :(得分:0)

这看起来像不是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系统范围内的依赖项被解释为相对路径,而不是绝对路径。解决此问题后,您的构建应会按预期工作。

答案 1 :(得分:0)

我现在可以构建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"]