【问题标题】:using external jar dependency in docker在docker中使用外部jar依赖
【发布时间】:2020-01-27 23:48:52
【问题描述】:

我正在使用通过 scope = system 添加的外部 jar,其中 ${basedir}/src/main/java/... 添加为 pom.xml 中的依赖子组下的系统路径。 每当我从 IntelliJ 本地使用项目时,都没有警告或错误。但是,当我尝试从 docker 容器启动 .jar 文件时,我得到了有关依赖项的异常。

我已经尝试通过 IntelliJ 中项目结构下的库添加罐子,并且只是将罐子添加到根目录下的 libs 文件夹中。 首先我提供了绝对路径,但后来我将其更改为 ${basedir} 因为绝对路径没有映射为 docker 容器上的卷。 有什么方法可以将外部 jar 与项目 jar 打包,以便我可以在 docker 容器中使用它?

【问题讨论】:

  • 提供异常详情。
  • 在主项目中,我从外部 jar 调用类的构造函数,但无法解析导入。
  • 您需要向我们展示您是如何创建关于该部分的 docker 映像的。
  • 它使用官方 flink docker 镜像的简单镜像,我只是将 jars 复制到其中.. FROM flink:1.9 COPY ./jars ./jars

标签: java maven docker jar


【解决方案1】:

IIUC 你至少有两个选择:

1。将 JAR 添加到新图像(根据上面的 @LexByte 建议)。

假设 JAR 在您的主机上的 ${PWD}/jars 中,并且您希望它们在容器中的 ${WORKDIR}/jars 中:

FROM [[original-image]]
WORKDIR ...
COPY ./jars ./jars

然后,确保您的代码通过 [[WORKDIR]]/jars/[[some-jar]] 引用 JAR

NB [[WORKDIR]] 是您设置为容器工作目录的任何内容。

2。使用现有镜像将 JAR 挂载到容器中:

docker run ... --volume=${PWD}/jars:[[WORKDIR]]/jars ...

NB [[WORKDIR]] 是您将用作容器工作目录的任何内容。这是将 JAR 安装到容器中的位置。

【讨论】:

  • 我设法通过在 maven m2 文件夹中本地安装 jar 来解决问题。将 jars 添加为外部库,并在具有范围运行时的依赖项中引用它们。构建主项目 jar 将这些库包含在大 jar 中。之后我不需要在 docker 镜像中添加 jars。
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多