[英]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。 喜欢:
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Dummy repository</name>
<url>!!!file:///Users/apanfilov/.m2/repository!!!</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
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.