Springboot应用程序打包为jar时未检测到应用程序属性文件

Posted

技术标签:

【中文标题】Springboot应用程序打包为jar时未检测到应用程序属性文件【英文标题】:Springboot app not detecting the application properties file when the application is packaged as jar 【发布时间】:2021-08-09 11:15:32 【问题描述】:

我有一个 Springboot Gradle 项目。该应用程序已在 IDE 中启动并完美运行。但是当我将它打包为 jar 并运行 jar 文件时,应用程序没有检测到application.properties(或application.yml)文件属性。我必须明确添加@PropertySource 才能阅读application.properties。我觉得应用程序打包存在一些问题。这是我的 Gradle 插件。

buildscript 
    repositories 
        mavenLocal()
        maven 
            mavenLocal()
            url <Maven Repo>
        
    
    dependencies 
        classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE"
        classpath "com.github.jengelman.gradle.plugins:shadow:4.0.2"

    


plugins 
    id 'java'
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id "application"
    id "jacoco"


apply plugin: 'io.spring.dependency-management'
apply plugin: "com.github.johnrengelman.shadow"
apply plugin: 'project-report'

关于这个问题的任何线索都有帮助。

【问题讨论】:

你能把你的项目src/main、resources...的结构贴出来吗? 你运行的是哪个 jar 文件,常规的 jarbootJar 还是 shadowJar @RenatoIvancic 添加了应用程序结构。 @thokuest 我运行常规 jar 它是否适用于bootJar 【参考方案1】:

我不知道您在 gradle buildscript 中还有 org.springframework.boot 插件时如何设法运行 jar 任务。作为来自 java 插件的spring boot plugin should disable jar 任务。 Stack overflow answer.

如果你已经覆盖了这个并且你想要生成工作 jar,你仍然需要配置这些库将被包含或将它们传递给 java 命令。

因此,基本上,如果您使用 Spring 应用程序,标准方法是使用 bootJar Gradle 任务,该任务将生成 Spring Boot classloader will be able to process 的 jar 文件。正如评论中提到的@dan1st。

查看 Spring Boot 打包的 jar 与普通 jar 的结构不同:

+--- spring-boot-jar-0.0.1-snapshot.jar
     +--- meta-inf
     +--- boot-inf
     |    +--- classes                            # 1 Project Classes
     |    |     +--- com.rivancic.boot
     |    |     |    +--- SpringJarApplication.class
     |    |     |
     |    |     \--- application.properties
     |    |
     |    +--- lib                                # 2 Nested Jar Libraries
     |          +--- attoparser-2.0.5.RELEASE.jar
     |          +--- jackson-annotations-2.11.4.jar
     |          \--- ...
     |
     +--- org.springframework.boot.loader         # 3 Spring Boot Loader Classes
          +--- jarlauncher.class
          +--- launchedurlclassloader.class
          \--- ...

普通罐子:

+--- jar-0.0.1-snapshot.jar
     +--- meta-inf  
     +--- com.rivancic.boot                       # 1 Project Classes
     |    +--- SpringJarApplication.class
     |
     \--- application.properties

【讨论】:

以上是关于Springboot应用程序打包为jar时未检测到应用程序属性文件的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot将项目打包成jar包

007 springboot打包为jar

SpringBoot 打包

IDEA SpringBoot 项目打包成jar包

SpringBoot 微服务打包为Docker镜像

SpringBoot 微服务打包为Docker镜像