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

2023-11-21 01:12

本文主要是介绍透视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一个新项目到本地后续又合并新版本分支的时候基本就容易遇见这些问题,只有了解清楚这些问题的本质,下次我们再遇见就非常容易解决了

这篇关于透视maven打包编译正常,intellj idea编译失败问题的本质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398780

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事