解决运行jar包时报错“没有主清单属性“以及丢失依赖jar包的问题

问题描述

在这里插入图片描述

原因描述

Maven 打包时默认情况下不会将第三方依赖打包进去是因为 Maven 遵循了一种依赖管理的原则,即将项目与其依赖库(第三方库)分开管理。这样做有以下几个优点:
1.减小打包体积:如果所有的第三方依赖都包含在打包文件中,将会导致最终的构建产物巨大,增加部署和传输的成本。而只打包项目本身的代码和资源,可以显著减小生成的可执行文件的大小。
2.依赖共享与复用:Maven 使用中央仓库来存储和管理各种开源库,这些库可以被多个项目共享和复用。通过在项目的 pom.xml 文件中声明依赖,Maven 可以自动下载所需的库文件,确保项目构建所依赖的库的版本一致性,并在构建过程中自动解决依赖关系。
3.简化维护和升级:由于第三方依赖独立于项目进行管理,并且通过 Maven 的依赖管理机制进行引入和更新,当需要升级某个第三方库的版本时,只需修改项目的 pom.xml 文件中的相应依赖版本号,而无需手动替换库文件或修改代码。
尽管 Maven 默认不会将第三方依赖打包进可执行文件中,但你仍然可以通过 Maven 的插件来实现将依赖打包到可执行文件中的需求。例如,通过 Maven Shade 插件或者SpringBoot的Maven插件可以创建一个可执行 JAR 文件,并将所有依赖库打包为一个可执行的大 JAR 文件

在一些情况下,即使没有在 Maven 插件配置中显式指定主类,在打包时也可以成功生成包含主清单属性的可执行 JAR 文件。这是因为在某些情况下,Maven 可以自动检测到项目的入口点,并将其作为默认的主类。
然而,这种自动检测主类的行为并不是所有情况下都适用。具体是否需要显式指定主类取决于你的项目结构和依赖关系。如果 Maven 无法自动检测到主类或者检测到的主类不是你希望的,最常见的就是你的引导类名不规范导致如"Starter"(应该是StarterApplication),就会出现"没有主清单属性"的错误。
因此,为了保证项目的可靠性和一致性,建议在 Maven 插件配置中显式指定主类。这样可以避免潜在的问题,并确保打包后的可执行 JAR 文件始终具有正确的主清单属性。


解决方案:

1:规范书写


2 明确声明主类名以及打包方式


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
            true
                引导类全类名
            
        
    


你可能感兴趣的:(java,spring,boot,maven)