java高级开发

IDEA中多模块打包找不到其它模块解决

2023-01-03  本文已影响0人  老鼠AI大米_Java全栈

今天将一个单模块项目拆分为多模块微服务项目,在idea工具中没有报错,但打包就提示找不到其它包的类。

MAIN未找到

这是你在子项目中加入了

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>

spring boot中加入 这个插件他会默认的去寻找主类,这样就会导致打包不过,在网上百度了很久,问题还是没解决,最后我是在他们的子项目中加了一个main
还可以使用其它打包工具,如org.apache.maven.plugins

打包子项目失败 和错误信息程序未找到

在打包多Maven多模块项目时要注意一些小细节,先打包root项目在打包子项目,先进行子项目的打包可能会出现一些依赖问题


image.png

先clean在install,如果打包子项目还是报错,那么在你 的通用类加入

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

原因分析: spring-boot-maven-plugin打包出来的jar是不可依赖的

如现在整合后的maven项目有一个parent工程,打包类型为pom,下面多个spring-boot工程作为它的module,分别为子模块和moduleA,moduleB。假如moduleA依赖于子模块。如果你在子模块中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。那么在clean package的时候会发现moduleA找不到子模块中的类。原因就是默认打包出来的jar是不可依赖的。

解决方案:

官方告诉我们,你如果不想移代码,好吧,我这样来给你解决,给你打两个jar包,一个用来直接执行,一个用来依赖。于是,你需要指定一个属性classifier,这个属性为可执行jar包的名字后缀。比如我设置<classifier>exec</classifier>,原项目名为Vehicle-business。那么会得到两个jar:Vehicle-business.jarVehicle-bussiness-exec.jar

上一篇 下一篇

猜你喜欢

热点阅读