项目编译失败:显示程序包不存在


问题

本地项目中有有 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 缓存并重启:


如果有帮助的话,可以点个赞支持一下嘛🙏

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值