在我的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
如何处理?
答案 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"]