当前位置: 首页 > news >正文

透视maven打包编译正常,intellj idea编译失败问题的本质

前言

maven多模块类型的项目,在Java的中大型应用中非常常见, 在 module 很多的情况,经常会出现各种各样的编辑依赖错误问题,今天记录一种比较常见的 case :

A 子模块依赖 B 子模块,在 Terminal 上终端上 项目根目录下打包编译是正常的,如下命令都是执行成功的:

mvn clean install -U
mvn clean package
mvn dependency:tree

但偏偏打开 IDEA 中的类文件,A 模块中的类显示找不到依赖 B 模块的类,具体就是某个子模块的依赖的类找不到,各种 reimport 和 invalid cache restart 都尝试过了,还是无法解决,这是为什么呢 ?

IDEA Maven 工程结构

如上图,maven 工程通用的配置项这里不再说明,这里着中看下和 IDE 有关两个配置项:

.idea

项目级别设置,通常包括版本控制系统信息,模块信息,运行配置,代码样式等,通常情况下,这些配置文件不应该被包含在版本控制系统中,因为它们是特定于开发环境的

.iml

模块级别设置,每个模块(Module)都有一个对应的 .iml 文件,它包含了有关模块的信息,例如源代码目录、依赖关系等, .iml 文件的一些常见内容如下:

  • 源代码目录配置: 包括 sourceFolder 元素,定义了模块中的源代码目录。
  • 依赖关系配置: 包括 orderEntry 元素,定义了模块的依赖关系,例如依赖的库、其他模块等。
  • 输出目录配置: 包括 output 元素,定义了编译输出的目录。

这些文件是由 IntelliJ IDEA 自动生成和维护的,通常无需手动编辑。它们存储了项目和模块的配置信息,以确保 IntelliJ IDEA 能够正确地理解和构建项目

注意:.idea 目录和 .iml 文件通常会被添加到 .gitignore 文件中,避免提交到代码仓库

IDE 编译报错问题

回到文章开头,maven打包是正常的情况下,IDEA 却编译报错,这通常是 pom 记载的依赖关系信息 与 iml 里面的内容不一致造成,一个典型的案例:

父pom版本升级了,子 pom 中引用的父 pom 的版本号,上次版本是 1.0.0-SNAPSHOT,这次升级成2.0.0-SNAPSHOT,修改完成后,maven打包正常,IDEA 的代码在 reimport 和 invalidate cache/restart 重启后飘红报错 。

解决依赖关系不一致问题

方法一

使用 mvn idea:module 命令,强制重新生成最新的依赖关系到 .iml 中

方法二

手动删除 .idea 目录和所有的 .iml 文件信息后,重启 IDEA,让其重新自动生成,推荐优先使用方法一,如果不生效的情况下,再使用该方法

总结

我们常常关心 maven 相关的配置,而 IDE 的一些配置文件却被忽略了,其实在本地开发环境中,尤其是使用了版本控制系统 Git 后或者项目逐渐变得庞大和复杂的时候,IDE的配置文件会记录这些东西和依赖,如果项目长时间不用再打开 或者 check一个新项目到本地后续又合并新版本分支的时候基本就容易遇见这些问题,只有了解清楚这些问题的本质,下次我们再遇见就非常容易解决了

http://www.lryc.cn/news/237213.html

相关文章:

  • npm报错
  • 【FFmpeg实战】ffmpeg播放器-音视频解码流程
  • 基于SSM的高校毕业选题管理系统设计与实现
  • 一个简单的Oracle Redaction实验
  • getchar函数的功能有哪些
  • 信息机房监控系统(动环辅助监控系统)
  • 最强英文开源模型Llama2架构与技术细节探秘
  • 编程刷题网站以及实用型网站推荐
  • 基于STC12C5A60S2系列1T 8051单片机的SPI总线器件数模芯片TLC5615实现数模转换应用
  • 【并发编程】Synchronized的使用
  • 【Python】Python基础
  • gitlab环境准备
  • Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join
  • 【AI】行业消息精选和分析(23-11-20)
  • Matplotlib实现Label及Title都在下方的最佳姿势
  • 使用 uWSGI 部署 Django 应用详解
  • MyBatis在注解中使用动态查询
  • 百云齐鲁 | 云轴科技ZStack成功实践精选(山东)
  • 【Electron】electron-builder打包失败问题记录
  • OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测
  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量
  • 医疗软件制造商如何实施静态分析,满足 FDA 医疗器械网络安全验证
  • 【设计模式】聊聊策略模式
  • 二维偏序问题
  • 解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解
  • 谷歌浏览器版本下载
  • js 打开页面的方法总结
  • element UI表格中设置文字提示(tooltip)或弹出框(popover)时候注意的地方
  • 【网络】OSI模型 与 TCP/IP模型 对比
  • [Docker]记一次使用jenkins将镜像文件推送到Harbor遇到的问题