IDEA中多模块间依赖导入成功,但是编译时却报找不到该包:could not find artifact xxxx

项目结构如下:

gulimall(父类工程)

| - - - gulimall-common(通用工具类子工程,非springboot项目)

| - - - gulimall-product(springboot子工程,依赖common、third-party工程)

| - - --gulimall-third-party(springboot子工程,依赖common工程)


问题及解决过程:
在编译gulimall-peoduct模块的时候,报错如下:显示找不到common模块的包!但是我们确实已经导入整个common模块作为其依赖。
在这里插入图片描述


1.处理common模块打包失败
在这里插入图片描述

于是我们单独编译一下common模块,找一下问题,显示如下:
在这里插入图片描述
看来编译器使用的是1.5版本,还不支持泛型,所以我们需要指定使用高版本的编译器:

  • 这里我们可以通过在project setting中设置common模块的language level为8版本来解决问题:
    在这里插入图片描述
    同时我们可以在setting中设置Java Compiler为1.8版本:
    在这里插入图片描述


上述方法的问题是:IDEA中Java Compiler以及项目中language level老是自动回调 (参考文章:https://blog.csdn.net/LiaoHongHB/article/details/83900387 ) 。

  • 每当我们打开其他项目或者在pom.xml文件中引入其他依赖之后,重新运行我们项目的时候,会发现又出现了编译器版本不对的情况,为了彻底的解决这种情况,我们可以在common模块的pom.xml文件中这样设置:
<build>
        <plugins>
            <!--指定了编译器的版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

        </plugins>
    </build>


这样我们的common模块就可以编译成功了,可以看到因为我们的common模块被打包成功!
在这里插入图片描述
在这里插入图片描述


2.处理gulimall-product中导入common包失败

我们还是将gulimall-common调整为一个springboot的模块,然后在gulimall-product中进行打包,还是显示找不到 guli-common的jar包。


解决方法一:

(参考文章:https://zfpp25.blog.csdn.net/article/details/79656972)
因为直接对product模块打包,common并没有被打包,依赖关系无法保持。这时你要做的就是:

1.首先对项目common进行install(第一部分我们已经确保了common模块可以正常打包)。

注意:
Common打包出来的应该是不可执行的jar包(应该是一个可以被其他模块引用的jar包),所以不要在Common的pom中定义**spring-boot-maven-plugin **插件。因为这个SpringBoot插件会在Maven的package后进行二次打包,目的为了生成可执行jar包(这个包的名字和我们第一次打的包名字一样),如果common中定义了这个插件,会报错提示没有找到main函数。

2.这时你就可以去打包product项目了,当然打包的时候可能还是不行,这里还有一个小坑,如果还是不能进行打包的话,那么就install一下root项目,也就是总目录下的pom文件对应的install操作,这样再打包product项目基本上就没有问题了。

解决方案二:
(感觉方案一更好用些)

因为我们这里还有个gulimall-third-party的模块,这个模块是需要打包成可执行的jar包的,并且我们的common模块也是引用了这个包,我们就算不在common模块中引入spring-boot-maven-plugin插件,但是gulimall-third-party模块又怎么处理叻?

在被调用的模块pom设置为:(这里我们common根本不添加此插件,在third-party中添加下面依赖)

<plugin>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <version>2.1.18.RELEASE</version>
     <executions>
         <execution>
             <phase>none</phase>
         </execution>
     </executions>
     <configuration>
         <classifier>execute</classifier>
     </configuration>
 </plugin>

在调用的模块设置:(这里我们是在product中添加这个依赖)

<plugin>
     <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.3.7.RELEASE</version>
      <configuration>
          <mainClass>com.yxj.gulimall.product.GulimallProductApplication</mainClass>
      </configuration>
      <executions>
          <execution>
              <id>repackage</id>
              <goals>
                  <goal>repackage</goal>
              </goals>
          </execution>
      </executions>
</plugin>

网上的大部分教程是这样的,但是自己设置后却还是显示third-party找不到,于是我先打包一下third-party模块,显示没有问题。然后选择将打好的包添加到library中:
在这里插入图片描述

我们选择打jar Directory包,然后做了下面的设置:
在这里插入图片描述
然后当我们再次打包product的时候,就已经可以依赖到third-party模块了!


为了避免后续还要修改third-party中的代码,我们在打包成功后,再从project struture中的libraries中,找到我们刚才加入的包,直接删除,点击ok后,再点击右下角的apply即可!即使删除之后,我们再去打包product项目也不会报错了!
在这里插入图片描述

在多模块打包错"Error: Could not find artifact 包地址"通常是由于以下几个原因造成的: 1. 仓库配置错误:请确保你的仓库配置文件(如settings.xml)中配置了正确的仓库地址和认证信息。你可以检查一下该文件中的配置是否正确,并尝试重新构建项目。 2. 模块依赖错误:检查一下你的模块依赖是否正确。如果你依赖模块不存在或者版本号错误,可能会导致无法到对应的artifact。你可以检查一下依赖项的名称和版本号是否正确,并且确保这些依赖模块可以在仓库中到。 3. Maven仓库问题:如果你使用的是私有仓库,可能会出现无法artifact的问题。请确保你的私有仓库可用,并且在仓库配置中进行正确的设置。 4. 网络连接问题:有候,网络连接不稳定或者防火墙设置会导致无法下载artifact。请确保你的网络连接正常,并且能够访问相关仓库。 5. 手动安装artifact:如果你确定artifact在仓库中存在,但仍然无法到,你可以考虑手动安装该artifact到本地仓库。你可以使用以下命令将artifact安装到本地仓库: ``` mvn install:install-file -Dfile=path/to/artifact.jar -DgroupId=group-id -DartifactId=artifact-id -Dversion=version -Dpackaging=jar ``` 希望这些解决方案能够帮助到你!如果问题仍然存在,请提供更详细的错误信息,我将尽力提供更进一步的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值