java - Docker多阶段maven构建拆分依赖解析和编译
问题描述
我正在尝试为基于 maven 的 java 项目设置一个多阶段的 dockerfile。这是我目前使用的:
### STAGE 1: Build ###
FROM maven:3.6.1-jdk-8 as build
WORKDIR /usr/src/app
# Install app dependencies
COPY pom.xml .
RUN mvn dependency:go-offline
# Bundle app source
COPY src src
RUN mvn package
### STAGE 2: Production Environment ###
FROM jboss/wildfly:17.0.0.Final
COPY --from=build /usr/src/app/target/Appname.war /opt/jboss/wildfly/standalone/deployments/Appname.war
RUN /opt/jboss/wildfly/bin/add-user.sh admin admin123 --silent
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
问题是关于mvn
命令的。我看到它mvn dependency:go-offline
下载了一些依赖项,这很棒。但随后会mvn package
下载更多软件包。为什么?我怎样才能有两个步骤:
- 一种用于解决和下载所有依赖项
- 一种用于编译源代码和创建 .war 文件
编辑
使用mvn package -o
,我找不到以下包:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources) on project monolith: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved: The following artifacts could not be resolved: org.apache.maven:maven-profile:jar:2.0.6, org.apache.maven:maven-repository-metadata:jar:2.0.6, org.apache.maven:maven-plugin-registry:jar:2.0.6, classworlds:classworlds:jar:1.1-alpha-2: Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact org.apache.maven:maven-profile:jar:2.0.6 has not been downloaded from it before. -> [Help 1]
我认为这与pom.xml
. 有什么想法吗?
<build>
<finalName>Monolith</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<!--<configuration>-->
<!--<webXml>src\main\webapp\WEB-INF\web.xml</webXml>-->
<!--</configuration>-->
</plugin>
</plugins>
</build>
解决方案
您很可能受到MDEP-82 go-offline / resolve-plugins 无法解决当前未解决的所有插件依赖问题的影响。
根据MDEP-82 问题中的此评论,这可以通过指定 maven-dependency-plugin 版本而不是使用默认版本来解决:
然后明确定义用于离线的 maven-dependency-plugin 版本不依赖于 Maven 内部定义的默认版本:
mvn -s settings.xml org.apache.maven.plugins:maven-dependency-plugin:2.8:go-offline
推荐阅读
- mysql - 已安装连接器和 python,但 mysql 安装程序无法识别它们
- python - 在 settings.py Django 中保存 postgresql 服务器信息时出现语法错误
- javascript - 将内部 HTML 设置为无效 HTML 时如何保留原始 DOM 结构
- php - 无法将 AJAX POST 复制到 Postman
- python - request.GET.get() 是什么意思?
- batch-file - 通过批处理增加虚拟内存大小
- go - 使 jwt 编码更快
- linux - 汇编初学者问题:32 / 64 位代码差异
- python - 如何在python中执行快速浮点比较
- asynchronous - C++ 中异步编程的协程用法