记一个多模块导致的错误:no main manifest attribute

问题描述
在一个Maven多模块项目中,我在子模块打包后运行时遇到了一个问题,提示找不到Spring Boot应用的主类。尽管我已经在子模块的pom.xml中明确指定了主类,但问题依然存在。

尝试解决
最初,我认为问题可能出在子模块的pom.xml配置上。于是,我在pom.xml中设置了主类:

<properties>
    <start-class>com.example.MainApplication</start-class>
</properties>

然而,问题依然存在,打包时仍然提示找不到主类。这让我意识到,问题可能并不仅仅是主类配置的问题。

深入排查
接下来,我决定从更高的层级入手,检查父模块的pom.xml。在查看父模块的插件配置时,我发现了如下配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

这行代码意味着父模块在执行构建时,跳过了spring-boot-maven-plugin插件的执行。由于子模块继承了父模块的配置,也导致子模块在打包时跳过了这个插件,最终导致了主类无法找到的问题。

解决方案
为了解决这个问题,我在子模块的pom.xml中重写了父模块的配置,将<skip>设置为false,确保插件在子模块中正常执行:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

这样,子模块的打包过程就不会再跳过spring-boot-maven-plugin插件,问题也得到了成功解决。

总结与教训
这次错误提醒我,在多模块项目中,父模块的配置会直接影响到子模块。在遇到问题时,不仅要检查子模块的配置,还要注意父模块的全局配置。尤其是在插件的执行上,任何跳过或禁用的配置都可能导致意想不到的后果。今后,在配置多模块项目时,我会更加谨慎,确保所有模块的配置都符合预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值