首页 > 解决方案 > Maven - 构建后如何使用“* .properties”文件?

问题描述

我的项目结构中有这些文件夹

在“资源”文件夹中,我有 2 个文件:"config.properties""logging.properties".

我的 pom.xml 中有以下“”:

<build>
    <resources>      
          <resource>
            <directory>src/main/resources</directory>
          </resource>
    </resources>
    <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
              <manifest>
                <mainClass>myapp.Main</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
          </configuration>
          <executions>
            <execution>
              <id>make-assembly</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
    </plugins>
  </build>

当我运行“mvn clean package”时,它会生成带有 jar 的“target”文件夹和包含上述属性文件的“classes”文件夹。

要读取其中一个属性文件(单击按钮后),我使用以下代码:

Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("logging.properties"));                        
String logFolder = prop.getProperty("myApp.property");    
//Do something with 'logFolder'

它运行正常。

但是,如果我更改“logging.properties”文件中的“myApp.property”,则更改不会影响“logFolder”值

我必须做什么才能动态更改属性值并使我的应用程序读取新值而不重新编译项目

谢谢你。

标签: javamaven

解决方案


您可以手动调用相应的插件:

mvn resources:resources maven-assembly-plugin:single

虽然这无论如何都不是最好的选择。最好不要为本地部署重新打包:

  1. 只需在 IDE 中启动应用程序,而不是构建 JAR。IDE 将检测配置中的更改。
  2. 通常允许使用环境变量或系统变量覆盖您的变量。因此,在阅读文件后,还要检查这些值是否被覆盖并使用它们。

对于远程部署,我们通常不会将配置文件保存在 JAR 中(您不想在其中保存 PRD 密码,对吗?)。所以部署到远程环境应该使用来自受限来源的配置文件。这意味着应用程序需要能够读取不在 JAR 中的配置。


推荐阅读