Java 读取外部应用程序属性中的POM值

Java 读取外部应用程序属性中的POM值,java,spring,maven,Java,Spring,Maven,我在pom文件中有以下属性 演示应用程序 演示spring项目 1.0.0-SNAPSHOT 我有一个类从application.yml 但是我没有使用src/main/resources下的application.yml,而是通过一个外部文件指定属性,如下所示 java-jar-DemoApplication-1.0.0-SNAPSHOT.jar--spring.config.location=application.yml 在这个外部应用程序属性中,我有以下属性 swagger: api

我在pom文件中有以下属性

演示应用程序
演示spring项目
1.0.0-SNAPSHOT
我有一个类从
application.yml
但是我没有使用
src/main/resources
下的
application.yml
,而是通过一个外部文件指定属性,如下所示

java-jar-DemoApplication-1.0.0-SNAPSHOT.jar--spring.config.location=application.yml
在这个外部应用程序属性中,我有以下属性

swagger:
apittitle:“@project.name@”
apiDescription:“@project.description@”
apiVersion:“@project.version@”
问题是,
@project.name@
和其他属性没有按预期被替换,而是按原样读取

应如何处理该问题?

根据,您可以使用以下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
    </configuration>
</plugin>

org.apache.maven.plugins
maven资源插件
2.7
@
假的
使用
usefaultdelimiters
设置为
false
true
,具体取决于您的配置

该官方文档的其他部分将有助于您的用例,特别是其中的一部分:“77.5将YAML用于外部属性”

如果没有工作,为什么不加载自定义属性文件?它可以加载,因为你需要没有任何问题。只要在启动程序时用正确的路径引用它,然后在程序内部测试您的文件
config.properties
是否可用并包含您需要使用的内容

当然,加载资源文件的Maven方式是最简单的方式,它也应该是一个简单的属性文件。在我发布的管理配置的软件中,我就是这样做的:

  • 编写
    app.properties
  • 在运行时使用Maven和资源配置加载该文件
  • 使用经典语法${my.prop}扩展属性
  • 使用Maven任务运行程序
  • 当然,当你把你的应用程序作为一个jar分发时,情况就有点不同了。 也许您可以尝试在Maven目标内编写属性文件。

    根据,您可以使用以下配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
            <delimiters>
                <delimiter>@</delimiter>
            </delimiters>
            <useDefaultDelimiters>false</useDefaultDelimiters>
        </configuration>
    </plugin>
    
    
    org.apache.maven.plugins
    maven资源插件
    2.7
    @
    假的
    
    使用
    usefaultdelimiters
    设置为
    false
    true
    ,具体取决于您的配置

    该官方文档的其他部分将有助于您的用例,特别是其中的一部分:“77.5将YAML用于外部属性”

    如果没有工作,为什么不加载自定义属性文件?它可以加载,因为你需要没有任何问题。只要在启动程序时用正确的路径引用它,然后在程序内部测试您的文件
    config.properties
    是否可用并包含您需要使用的内容

    当然,加载资源文件的Maven方式是最简单的方式,它也应该是一个简单的属性文件。在我发布的管理配置的软件中,我就是这样做的:

  • 编写
    app.properties
  • 在运行时使用Maven和资源配置加载该文件
  • 使用经典语法${my.prop}扩展属性
  • 使用Maven任务运行程序
  • 当然,当你把你的应用程序作为一个jar分发时,情况就有点不同了。
    也许您可以尝试在Maven目标内编写属性文件。

    您是如何读取属性的?使用
    @Value()
    发布代码。它在使用src/main/resources下的文件时工作,但在属性位于外部文件时不工作据我所知,尝试使用@PropertySources,甚至在构建阶段将属性文件捆绑起来。我的目标是执行阶段。您如何阅读属性?使用
    @Value()
    发布代码。它在使用src/main/resources下的文件时工作,但在属性位于外部文件时不工作据我所知,尝试使用@PropertySources,甚至在构建阶段将属性文件捆绑起来。我的目标是执行阶段。