【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package

简介: 在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。

问题描述

部署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 /f

Folder PATH listing for volume Local Disk

Volume serial number is 4CDB-764A

C:.

| .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 中的作用是:

🧩 命令目的解释:

  1. ./mvnw:使用项目自带的 Maven Wrapper(mvnw),确保使用的是项目指定版本的 Maven,而不是系统安装的 Maven。
  2. dependency:go-offline:提前下载所有依赖项,以便后续构建过程可以在离线环境中进行,提高构建速度和稳定性。
  3. -B:表示 batch 模式,避免 Maven 交互式提示,适合自动化构建。
  4. -Dproduction:传递一个名为 production 的系统属性,可能用于激活某些 profile 或配置。
  5. package:执行 Maven 的 package 阶段,通常会编译代码并打包成 JAR 或 WAR 文件。

🛠 报错分析:

错误信息:

/bin/sh: line 1: ./mvnw: cannot execute: required file not found

说明 Docker 构建过程中找不到 ./mvnw 文件,可能原因如下:

✅ 解决方法:

  1. 确认 mvnw 文件是否存在于 Docker 构建上下文中
  • mvnwmvnw.cmd 应该在项目根目录。
  • 如果你用的是 .dockerignore 文件,确保没有把 mvnw 忽略掉。
  1. 检查 Dockerfile 的工作目录设置
  • 确保你在执行命令前设置了正确的工作目录,例如:
WORKDIR /app
COPY . /app
RUN chmod +x mvnw
RUN ./mvnw dependency:go-offline -B -Dproduction package
  1. 添加执行权限
  • 有时 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 mvnw file is for Linux (bash) and the mvnw.cmd is 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 maven bin to Path on System Variables) if you already have mvnw in your project you can use ./mvnw instead of mvn in the commands.

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
5月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
456 6
|
5月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
407 3
|
5月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
381 8
|
6月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1014 12
|
6月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1107 1
|
6月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
327 4
|
7月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
7月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
7月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。

热门文章

最新文章