繁体   English   中英

多模块 Maven 项目 Dockerfile

[英]Multi-module Maven project Dockerfile

我尝试为多模块 Maven 项目编写 Dockerfile。 我有 5 个模块。 2 个模块仅包含依赖项。 我将 Dockerfile 分为 3 个步骤。 基础、deps(依赖)和构建器。 我有问题。

当我在本地运行mvn -B -e org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline所有步骤都成功

[INFO] core ............................................... SUCCESS [  0.248 s]
[INFO] dispatcher ......................................... SUCCESS [  0.146 s]
[INFO] repository ......................................... SUCCESS [  0.130 s]
[INFO] worker ............................................. SUCCESS [  0.137 s]
[INFO] api ................................................ SUCCESS [  0.219 s]

但是,当我从 Dockerfile 执行相同的命令时:

FROM amazoncorretto:8 AS base

FROM maven:3-amazoncorretto-8 as deps
WORKDIR /appbuild
COPY pom.xml pom.xml
COPY core/pom.xml core/pom.xml
COPY dispatcher/pom.xml dispatcher/pom.xml
COPY worker/pom.xml worker/pom.xml
COPY repository/pom.xml repository/pom.xml
COPY api/pom.xml api/pom.xml
RUN mvn -B -e org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline

我收到:

11:34:16  #18 15.00 [ERROR] Failed to execute goal on project dispatcher: Could not resolve dependencies for project pl.mycustom:dispatcher:jar:1.0: Could not find artifact pl.mycustom:core:jar:1.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]
11:34:16  #18 15.00 org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project dispatcher: Could not resolve dependencies for project pl.mycustom:dispatcher:jar:1.0: Could not find artifact pl.mycustom:core:jar:1.0 in central (https://repo.maven.apache.org/maven2)
11:34:16  #18 15.00     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
11:34:16  #18 15.00     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
11:34:16  #18 15.00     at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:401)


11:34:16  #18 15.00 [INFO] website-automation-rule-cluster .................... SUCCESS [  9.809 s]
11:34:16  #18 15.00 [INFO] core ............................................... SUCCESS [  2.682 s]
11:34:16  #18 15.00 [INFO] dispatcher ......................................... FAILURE [  0.879 s]
11:34:16  #18 15.00 [INFO] repository ......................................... SKIPPED
11:34:16  #18 15.00 [INFO] worker ............................................. SKIPPED
11:34:16  #18 15.00 [INFO] api ................................................ SKIPPED
11:34:16  #18 15.00 [INFO] ------------------------------------------------------------------------
11:34:16  #18 15.00 [INFO] BUILD FAILURE

为什么它在本地工作而不是从 Dockerfile 工作?

此外,我尝试了不同版本的插件 apache.maven.plugins:maven-dependency-plugin:go-offline。 例如 apache.maven.plugins:maven-dependency-plugin:3.2.0:go-offline。 但错误因版本而异。 使用 apache.maven.plugins:maven-dependency-plugin:3.2.0:go-offline 和更高版本时,本地 mvn go:offline 和来自 Dockerfile 的错误相同。

16:13:16  #18 27.61 [INFO] website-automation-rule-cluster .................... SUCCESS [ 15.759 s]
16:13:16  #18 27.61 [INFO] core ............................................... SUCCESS [  2.433 s]
16:13:16  #18 27.61 [INFO] dispatcher ......................................... SUCCESS [  0.761 s]
16:13:16  #18 27.61 [INFO] repository ......................................... SUCCESS [  3.528 s]
16:13:16  #18 27.61 [INFO] worker ............................................. SUCCESS [  0.088 s]
16:13:16  #18 27.61 [INFO] api ................................................ FAILURE [  3.421 s]
#20 360.8 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:3.2.0:go-offline (default-cli) on project api: org.eclipse.aether.resolution.DependencyResolutionException: Could not find artifact org.testng:testng:jar:6.12 in central (https://repo.maven.apache.org/maven2) -> [Help 1]
#20 360.8 org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:3.2.0:go-offline (default-cli) on project api: org.eclipse.aether.resolution.DependencyResolutionException: Could not find artifact org.testng:testng:jar:6.12 in central (https://repo.maven.apache.org/maven2)

我检查了 pom.xml 每个模块。 我没有找到 testng 依赖项。

这实际上是可悲的:(

在中央找不到工件 pl.mycustom:core:jar:1.0 ( https://repo.maven.apache.org/maven2 )

这个(根据命名约定)似乎缓存在您的本地 ~/.m2/repository (或/并存储在企业存储库中),这在 docker 容器中不可用,即如果它存储在企业存储库中,您需要设置docker 容器中的 maven(提供正确的 ~/.m2/setting.xml)

在中央找不到工件 org.testng:testng:jar:6.12 ( https://repo.maven.apache.org/maven2 )

这个问题更大:testng-6.12 从未部署到 maven Central,但您的项目中似乎存在使用它的插件依赖项:(

你能说出你的目标是什么吗? 如果您需要在单个位置收集项目的依赖项并且这是一次性活动,则可以从 ~/.m2/repository 加载依赖项,smth。 喜欢:

  1. setup ~/.m2/seettings.xml - 将本地缓存设置为镜像
    <mirrors>
        <mirror>
            <id>internal-repository</id>
            <name>Dummy repository</name>
            <url>!!!file:///Users/apanfilov/.m2/repository!!!</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>
  1. 执行类似mvn de.qaware.maven:go-offline-maven-plugin:1.2.8:resolve-dependencies -Dmaven.repo.local=.m2/repository的东西,将所有与项目相关的依赖项复制到另一个文件夹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM