目录
问题
本地项目中有有 2 个模块 A 和 B,模块 A 引用了 模块 B;但是当运行模块 A 时(有时不是运行时报错,而是使用 maven 打包时报错),却在编译阶段报错:xxx程序包不存在
,这里的程序包指模块 A 中使用的 模块 B 的代码所在的包。
解决
1. install到本地仓库
模块 A 引用了 模块 B,那么被依赖的模块(即 模块 B)一定要先执行 mvn install
命令(在 A 引用 B 之前),mvn install
命令会将 模块 B 打包并安装到本地仓库,这样模块 A 引用 模块 B 时才能在本地仓库中找到对应的依赖包。
执行 install 后,模块 A 就可以引入 模块 B,引入时请确保 B 的 maven 坐标正确无误。
1.1 插件问题
如果模块中引入了 spring-boot-maven-plugin
插件,那么引用该模块就可能出现 xxx程序包不存在
的问题。
(1)插件介绍
spring-boot-maven-plugin
插件 应该都不陌生,在我们使用 idea 的 Spring Initializr
新建 Spring Boot 项目时,就会帮我们自动引入,如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
该插件的主要作用是,将 Spring Boot 项目打包生成一个可执行的 jar 包。
如果项目中使用了该插件,当使用 maven 对项目打包时,就会将依赖的 jar 包全都打包进去,即生成的 jar 包 包含了需要的所有依赖,可以直接启动运行。
当我们引用该可执行 jar 包时,就可能出现问题。
(2)问题解决
那么,该如何解决 使用该插件后,模块引用出现 xxx程序包不存在
的问题呢?
第一种做法:
最简单的做法就是 在 pom.xml 中直接去掉该插件的配置。
第二种做法:
将插件的配置修改为如下的配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
这样配置的效果是,通过设置 <skip>true</skip>
,在使用 mvn install
打包时,将会跳过执行插件相关的功能。
第二种做法特别适用于 父子项目 的场景:
父项目中使用了 spring-boot-maven-plugin
插件,父项目的某个子项目作为依赖给其他子项目使用(子项目会继承父项目的插件配置,即子项目中也使用了插件),该子项目中就应该设置上方的插件配置(打包时跳过执行插件的功能),以确保生成的依赖被其他项目引用时不会出现问题。
1.2 修改后要重新install
如果被依赖的模块有修改,记得一定要将其重新 执行 install 命令;同时,引入依赖的模块可以刷新下 maven;这样就确保了引入的依赖是最新的。
2. maven编译通过,idea编译失败
之前遇到一种情况,就是 maven 执行 compile、package、install 等操作都没问题,其中都有 maven 的编译操作,因此也即 maven 编译能够通过;但是 当 执行 idea 的 Build 编译时(idea 上方的绿色小锤子,项目启动前也会执行),却报 xxx程序包不存在
的错误。
因为 maven 编译 和 idea 编译 的环境不同,所以怀疑是 idea 编译器的问题,那么该如何解决呢,莫非要我自己手写一个 IDE?(bushi)
解决方法就是:将 idea 的 构建/运行 操作 委托给 maven。具体见下图:
3. mvn idea:idea
有一种解决方法就是,在项目的根目录下 执行 mvn idea:idea
命令(该命令用于生成 idea 项目文件),执行后会生成两个 .ipr
与 .iws
后缀的两个文件。
4. 刷新、重启
如果已经正确 install 并且引入,而且上述方案都试过了,还是报 xxx程序包不存在
,那么就只剩下最后的这些方法了。
可以先刷新一下项目的 maven,不行的话就执行一下 mvn clean package
重新打一下包。
还是不行的话,就重启大法吧:清空 idea 缓存并重启(具体见下图操作),重启电脑。
清空 idea 缓存并重启:
如果有帮助的话,可以点个赞支持一下嘛
🙏