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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IntelliJ IDEA是一个强大的Java集成开发环境(IDE),它可以轻松地与Maven集成,用于项目管理和构建。下面是配置Maven打包选项的基本步骤: 1. **打开Maven项目**: 在IDEA中,选择已有的Maven项目或右键单击并选择"New > Maven Project"来创建一个新的Maven项目。 2. **找到pom.xml文件**: 进入项目的`src/main/`目录,找到并打开`pom.xml`文件,这是Maven的配置文件。 3. **查找`<build>`标签**: 找到`<build>`标签,这通常位于`<project>`标签内部,用于定义构建相关的配置。 4. **配置`<plugins>`部分**: 在`<build>`标签下,查找或添加`<plugins>`标签,这里包含了Maven插件的列表。对于打包操作,主要关注的是`maven-compiler-plugin`和`maven-jar-plugin`。 5. **设置打包目标**: 对于`maven-compiler-plugin`,你可以配置`<executions>`元素来指定编译过程中的行为,例如: ```xml <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> ``` 对于`maven-jar-plugin`,你可以设置生成的目标包类型,如jar、war等,并配置相关属性,比如`archiveClassifier`用于为打包后的文件添加后缀名,`finalName`用于设置主JAR的名字。 6. **运行构建命令**: 使用快捷键Shift + F9或者点击工具栏上的“Build”按钮,执行Maven的clean、install或package命令来实际打包你的项目。 7. **查看结果**: 在IDEA的`Files`面板或者终端中,你会看到打包后的产物,如JAR文件。 相关问题--: 1. 如何在IntelliJ IDEA中手动触发打包操作? 2. 如何查看Maven打包过程中产生的详细日志? 3. IntelliJ IDEA是否有自动检查依赖并打包的功能?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值