【发布时间】:2015-09-29 09:43:15
【问题描述】:
我正在使用maven-spring-boot 插件来生成 jar。我有多个带有配置的资源文件 (application-production.yml, application-test.yml, application-development.yml)。
问题是,当我为我们的客户生成版本时,我想排除开发和测试文件。是否可以排除maven-spring-boot插件中的资源文件?
我试过了:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application-dev*</exclude>
<exclude>application-test*</exclude>
</excludes>
</resource>
</resources>
</build>
但是 maven 插件使用自己的脚本进行资源管理(例如@val@ 替换等),如果添加到 pom 中会在打包过程中失败:
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character @ '@' that cannot start any token. (Do not use @ for indentation)
in 'reader', line 4, column 18:
project.version: @project.version@
没有它,它工作正常。
【问题讨论】:
-
为什么要排除它们?是因为您不希望他们能够看到这些文件是因为它们导致错误吗? Spring boot 默认支持多个
application-{profile}.yml文件,所以这应该不是问题。 -
是的,我不希望每个版本都删除客户不应该看到的文件(test/dev db 的密码等)。另一种选择是使用参数运行 spring boot jar,从而设置所有必需的值 - 但不是绝对舒服。
-
您还可以拥有一个外部
application.properties文件(与您的应用程序 JAR/WAR 位于同一文件夹中)。 -
我确信通过一些 Maven 调整可以实现您的目标,但我认为您不应该以这种方式创建工件。生成的 jar 不应该包含生产属性,而是应该在 jar 外部,如果您遵循 these 约定,Spring Boot 可以自动获取这些属性
-
@g00glen00b,您想要排除它们的一个原因是要将开发/测试工件排除在生产交付之外。许多代码扫描器会认为它们的存在是一种安全发现。
标签: java maven spring-boot