如何从Spring Boot jar中排除资源文件?

问题描述 投票:5回答:3

我正在使用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@

没有它,就可以了。

java maven spring-boot
3个回答
6
投票

不是使用maven-spring-boot插件,而是使用maven-resource插件和maven配置文件:

<profiles>
  <profile>
    <id>prod</id>
    <build>
      <resources>
        <resource>
          <filtering>true</filtering>
          <directory>[your directory]</directory>
          <excludes>
            <exclude>[non-resource file #1]</exclude>
            <exclude>[non-resource file #2]</exclude>
            <exclude>[non-resource file #3]</exclude>
            ...
            <exclude>[non-resource file #n]</exclude>
          </excludes>
        </resource>
      </resources>
    </build>
  </profile>
</profiles>

确保您在资源元素中指定<filtering>true</filtering>选项。

为每个环境创建一个配置文件并过滤这些文件。

确保使用正确的配置文件执行Maven:

mvn clean install -P prod

要查看Maven资源插件的更多示例,请查看maven-resource

如果您想了解有关配置文件的更多信息,请查看profiles


0
投票

使用maven-resources-plugin,它支持排除标记。

顺便说一下,为什么需要使用三个Yaml文件?您可以使用“ ---”和spring.profiles在一个application.yaml文件中写入这些配置,例如:

memcached.addresses: test03:11211
spring.profiles.active: dev
---
# dev
spring:
    profiles: dev
logging.access.enabled: false
---
# test
spring:
    profiles: test
logging.config: classpath:log4j.test.properties
logging.access.dir: /home/shared/log
---
# online
spring:
    profiles: online
logging.config: classpath:log4j.online.properties
logging.access.dir: /home/shared/log

0
投票

Spring Boot Maven插件将Maven JAR插件创建的JAR文件重新打包。因此,您还可以选择在首次构建JAR时简单地排除文件,从而避免Spring Boot Maven插件首先找到它们:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <excludes>
             <exclude>application-dev*</exclude>
             <exclude>application-test*</exclude>
        </excludes>
    </configuration>
</plugin>

推荐问答