Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从spring引导jar中排除资源文件?_Java_Maven_Spring Boot - Fatal编程技术网

Java 如何从spring引导jar中排除资源文件?

Java 如何从spring引导jar中排除资源文件?,java,maven,spring-boot,Java,Maven,Spring Boot,我正在使用maven-spring-boot插件生成jar。我有多个配置资源文件(application-production.yml、application-test.yml、application development.yml) 问题是,当我为我们的客户生成发行版时,我想排除开发和测试文件。是否可以在maven-spring-bootplugin中排除资源文件 我试过这个: <build> <resources>

我正在使用
maven-spring-boot
插件生成jar。我有多个配置资源文件(
application-production.yml、application-test.yml、application development.yml

问题是,当我为我们的客户生成发行版时,我想排除开发和测试文件。是否可以在
maven-spring-boot
plugin中排除资源文件

我试过这个:

        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <excludes>
                        <exclude>application-dev*</exclude>
                        <exclude>application-test*</exclude>
                    </excludes>
                </resource>
            </resources>
        </build>

没有它,它工作正常。

使用maven资源插件和maven配置文件,而不是使用maven spring引导插件:

<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>
要查看更多maven资源插件示例,请查看


如果您想了解更多关于配置文件的信息,请使用maven resources插件查看一下,它支持排除标记

顺便问一下,为什么需要使用三个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

SpringBootMaven插件重新打包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>

org.apache.maven.plugins
maven jar插件
3.1.0
应用程序开发*
应用测试*

maven资源插件不使用就地编辑属性值。这就是为什么不能在属性文件中使用@project.version@的原因。请确保已指定
true
谢谢。最后我回到这条线索上,你真的解决了。。伟大的Spring boot还支持多个现成的
应用程序-{profile}.yml
文件。maven-resource-plugin不支持就地替换@value@标记。引导插件可以做到这一切,为什么要排除它们?是因为您不想让他们看到这些文件,还是因为它们导致了错误?Spring boot默认支持多个
application-{profile}.yml
文件,所以这不应该是一个问题。是的,我不希望每个版本都删除客户看不到的文件(test/dev db等的密码)。另一个选项是使用参数运行spring boot jar,从而设置所有必需的值——但这并不一定令人满意。您还可以拥有一个外部
应用程序.properties
文件(与应用程序jar/WAR位于同一文件夹中)。我确信,通过一些Maven调整,您可以实现您的目标,但我认为你不应该以这种方式创建工件。生成的jar不应该包含生产属性,而应该是jar的外部属性,如果您遵循这些属性,可以通过springboot自动获取这些属性conventions@g00glen00b,您希望排除它们的一个原因是将开发/测试工件排除在生产交付之外。许多代码扫描器会认为他们的存在是安全的发现。这是最好和最干净的解决方案IMHO,允许使用Spring Boover Maven插件。这个答案不包括配置文件。通常情况下,每个配置文件都不包括资源,并且在回答中不包括配置文件。
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
<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>