【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
问题描述
部署Java应用到Azure Container App中,首先需要在本地构建镜像文件后上传到Azure Contaienr Registrier中。
但是,在第一步构建镜像的时候,就遇见错误:
=> ERROR [build 9/9] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package 0.6s
------
> [build 9/9] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package:
0.523 /bin/sh: line 1: ./mvnw.cmd: No such file or directory
就单独代码调试可以正常运行。而且,项目文件根目录(与Dockerfile同级)中,已经包含了 mvnw 文件和 mvnw.cmd, 所以,不应该是文件本身确实的原因导致的。
项目目录结构
....>javademo> tree /a /fFolder PATH listing for volume Local DiskVolume serial number is 4CDB-764AC:.| .gitignore| CHANGELOG.md| CONTRIBUTING.md| Dockerfile| LICENSE.md| mvnw| mvnw.cmd| pom.xml
...
DockerFile内容
# Build stage
FROM mcr.microsoft.com/openjdk/jdk:21-mariner AS build
ENV JAR_FILE=containerapps-albumapi-java-0.0.1-SNAPSHOT.jar
WORKDIR /app
COPY mvnw* /app/
COPY .mvn /app/.mvn
COPY pom.xml /app
COPY ./src /app/src
RUN ls -la /app
RUN chmod +x ./mvnw
RUN ./mvnw dependency:go-offline -B -Dproduction package # Runtime stage
FROM mcr.microsoft.com/openjdk/jdk:21-mariner
COPY --from=build /app/target/containerapps-albumapi-java-0.0.1-SNAPSHOT.jar /usr/src/myapp/
EXPOSE 8080
CMD ["/usr/bin/java", "-jar", "/usr/src/myapp/containerapps-albumapi-java-0.0.1-SNAPSHOT.jar"]
问题解答
以前遇见问题,全网搜索。当前,遇见问题,第一问AI大模型。
我得到的答案是:
我的问题:
RUN ./mvnw dependency:go-offline -B -Dproduction package 这句话在dockerfile中是什么目的呢?如果遇见报错“0.288 /bin/sh: line 1: ./mvnw: cannot execute: required file not found” 如何来解决它
M365 Copilot的回答:
这条命令:
RUN ./mvnw dependency:go-offline -B -Dproduction package
在 Dockerfile 中的作用是:
命令目的解释:
./mvnw:使用项目自带的 Maven Wrapper(mvnw),确保使用的是项目指定版本的 Maven,而不是系统安装的 Maven。dependency:go-offline:提前下载所有依赖项,以便后续构建过程可以在离线环境中进行,提高构建速度和稳定性。-B:表示 batch 模式,避免 Maven 交互式提示,适合自动化构建。-Dproduction:传递一个名为production的系统属性,可能用于激活某些 profile 或配置。package:执行 Maven 的package阶段,通常会编译代码并打包成 JAR 或 WAR 文件。
报错分析:
错误信息:
/bin/sh: line 1: ./mvnw: cannot execute: required file not found
说明 Docker 构建过程中找不到
./mvnw文件,可能原因如下:解决方法:
确认
mvnw文件是否存在于 Docker 构建上下文中:
mvnw和mvnw.cmd应该在项目根目录。- 如果你用的是
.dockerignore文件,确保没有把mvnw忽略掉。检查 Dockerfile 的工作目录设置:
- 确保你在执行命令前设置了正确的工作目录,例如:
WORKDIR /app
COPY . /app
RUN chmod +x mvnw
RUN ./mvnw dependency:go-offline -B -Dproduction package
添加执行权限:
- 有时
mvnw没有执行权限,可以加上:RUN chmod +x mvnw
如果你能提供 Dockerfile 的相关部分,我可以帮你更具体地定位问题并优化它。你想我帮你检查一下 Dockerfile 吗?
其实,根据以上三点提示,并没有定位到问题。
进一步思考, mvnw 是用于打包java 应用,而mvnw 和 mvnw.bat文件都是在创建项目是自动生成。
开始怀疑是文件内容由问题导致,所以决定删除并生成新文件。
使用下面的命令可以重新生成 mvnw文件或更新:
mvn -N io.takari:maven:wrapper

随后,再次执行 docker build 指令( docker build -t myalbum:v1 . )成功。镜像正常生成!

为了找到之前的 mvnw 文件为何会失败,在对比两个文件后发现:"重新生成mvnw文件是最快的解决之道"

参考资料
What is the purpose of mvnw and mvnw.cmd files? https://stackoverflow.com/questions/38723833/what-is-the-purpose-of-mvnw-and-mvnw-cmd-files
These files are from Maven wrapper. It works similarly to the Gradle wrapper.
This allows you to run the Maven project without having Maven installed and present on the path. It downloads the correct Maven version if it's not found (as far as I know by default in your user home directory).
The
mvnwfile is for Linux (bash) and themvnw.cmdis for the Windows environment.
To create or update all necessary Maven Wrapper files execute the following command:
mvn -N io.takari:maven:wrapper
To use a different version of maven you can specify the version as follows:
mvn -N io.takari:maven:wrapper -Dmaven=3.3.3
Both commands require maven on
PATH(add the path to mavenbintoPathon System Variables) if you already have mvnw in your project you can use./mvnwinstead ofmvnin the commands.
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package的更多相关文章
- Azure Container App(一)应用介绍
一,引言 容器技术正日益成为打包.部署应用程序的第一选择.Azure 提供了许多使用容器的选项.例如,我们可以使用 Azure 容器注册表来存储和管理 Docker Images.Azure Cont ...
- Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR
一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...
- Java,AWTUtilities,eclipse报编译错误:Access restriction: The type 'AWTUtilities' is not API (restriction on required library 'C:\Program Files\Java\jre7\lib\rt.jar')
[场景]调用com.sun.awt.AWTUtilities时,eclipse提示编译错误: Access restriction: The type 'AWTUtilities' is not AP ...
- 【Azure 应用服务】Azure Function App 执行PowerShell指令[Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt]错误
问题描述 使用PowerShell脚本执行获取Azure订阅列表的指令(Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt).在本地 ...
- Java程序员最常犯的错误盘点之Top 10
1. 数组转ArrayList 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: Arrays.asList确实会返回一个ArrayList对象,但是该类是Arra ...
- Android Studio 编译错误 Error:Execution failed for task ':app:buildInfoDebugLoader'.
今天来到打开昨天的项目运行正常,然后改动了一点代码编译报错: Error:Execution failed for task ':app:buildInfoDebugLoader'. > Exc ...
- Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源
一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...
- Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序
一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...
- Jenkins教程(五)构建Java服务Docker镜像
本文主旨 主要记录下如何使用Jenkins构建Java服务的Docker镜像,以及手动部署测试下 前期准备 已安装Jenkins 为jenkins用户添加到docker组内 本地装有maven,配置或 ...
- 使用 Azure Container Registry 储存镜像
Azure Container Registry(容器注册表)是基于 Docker Registry 2.0规范的托管专用 Docker 注册表服务. 可以创建和维护 Azure 容器注册表来存储与管 ...
随机推荐
- 🎀gh-ost工具介绍及使用
简介 gh-ost 是一款由GitHub开发的在线DDL(Online Data Definition Language)变更工具,专门用于MySQL数据库.它允许在不锁定表的情况下执行数据库模式变更 ...
- JuiceFS v1.3-beta1:全面优化 SQL 数据库支持,十亿级元数据管理新选项
JuiceFS v1.3-beta 今天正式发布.在这个版本中,除了进行了大量使用体验优化和 bug 修复外,新增如下特性: 新增 Python SDK:这是一个从企业版移植过来的特性,旨在支持 FU ...
- 前端 Vue 后端返回流,前端通过流进行下载
前端写法 //文件下载 async handleDownload(row) { try { // 假设文件是通过 GET 请求获取的,url 为文件资源的 API 地址 const response ...
- 2025.3.24 DP专题
题目按照主观难度增序排列 Luogu P1758 [NOI2009] 管道取珠 有上下两个长度分别为 \(n,m\) 的管道 \(a,b\),管道中有两种不同颜色的球用 \(A,B\) 表示.现在每次 ...
- 设计即合规: 开放AI生态中的用户数据治理实践
Hugging Face Hub 已成为 AI 协作的核心平台,托管了数万个模型.数据集以及交互式应用程序 (Space). 在开放生态系统中,用户知情同意的管理方式与那些更 "数据饥渴&q ...
- Java编程--单例(Singleton)设计模式
单例设计模式 一个类只有一个实例,根据创建的时机又分为懒汉式和饿汉式,它们的区别主要体现在实例的创建时机和线程安全性上. 饿汉式(Eager Initialization): 特点: 在类加载时就创建 ...
- 导入别人的android studio项目
在导入别人的android studio项目(假设为项目A)时,会遇到gradle不一致的情况,以下简短介绍解决方法: 1. 打开要导入的项目的目录,删除下图红框中的文件. 2. 找到自己以前在自己的 ...
- Java三大特性 封装、继承、多态
封装 概念: 封装指的是将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问. 封装实现的步骤: 1.修改属性的可见性来显示属性的访问,一般设为pri ...
- 阿里云Ansible自动化运维平台部署
以下是在阿里云平台上基于Ansible实现自动化运维的完整实践指南,整合所有核心操作流程和命令,适配指定的服务器规划: 一.环境规划 主机名 IP地址 角色 操作系统 manage01 192.168 ...
- 【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
大家好,我是"蒋点数分",多年以来一直从事数据分析工作.从今天开始,与大家持续分享关于数据分析的学习内容. 本文是第 5 篇,也是[SQL 周周练]系列的第 4 篇.该系列是挑选或 ...