用Maven切换SLF4J SimpleLogger属性文件



我有一个典型的Maven项目结构,simplelogger.properties文件在类路径上:

+MyProject
`-- src
|-- main/java/com.mypackage.MyClass
`-- resources
`-- simplelogger.properties

这在IDE中可以完美地工作,因为正确的SimpleLogger配置已经在类路径上了。我想在打包完成的.jar中有另一个simplelogger.properties文件(输出到file而不是输出到System.out)。

是否有一种方法来取代simplelogger.properties上的类路径文件与另一个simplelogger.properties文件从其他地方与Maven打包时。jar?

这在某种程度上是一个X-Y问题。我建议这样做:

有两个模块。将您的simplelogger配置文件放在类路径的test部分。这将确保它不会进入生成的jar(这是当前问题的主要原因)。

然后有一个部署模块,它以您需要的形式将部署配置文件从上面添加到您的工件中。当您需要多个部署时,只需为每个部署创建一个模块。

如果您的jar文件已经构建,您可以覆盖您的属性:

java -jar myjar.jar --spring.config.location=D:wherevernew-logger.properties

但是,我检查了Spring Boot项目。

你可以在这里查看更多信息:

  • 外部化配置

在运行应用程序时,可以将simplelogger.properties文件放在程序的类路径或工作目录中。

`-- work-dir
|-- myApp.jar
`-- simplelogger.properties

如果您的应用程序在IDE中正常运行,并且在打包时不能正常运行,则可能您的JAR文件不包含资源。在这种情况下,您可以在pom.xml文件中使用以下配置将资源复制到JAR文件中。

<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<includeEmptyDirs>true</includeEmptyDirs>
<resources>
<resource>
<directory>${basedir}/src/customize</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>${basedir}/src/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>

最新更新