Maven filter问题
我们可以在项目的pom.xml文件中添加如下内容,其会把src/main/resources
目录下的所有文件都当做咨询文件,此外通过<filtering>true</filtering>
指定了这些资源文件将经过过滤。过滤的时候可以使用pom.xml中定义的properties或project相关信息等。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
比如在src/main/resources
目录下有个文件app.properties
,其定义了app.version=${project.version}
,通过filter编译后app.properties文件中的${project.version}
将会替换为pom.xml中project元素下的version元素的文本值。这是Maven的标准功能。但如果你的项目指定了spring-boot-starter-parent
为父工程,则在资源文件中使用的${}
占位符内容不会被filter替换。通过查看spring-boot-starter-parent
的pom.xml文件可以看到其把分隔符指定为属性resource.delimiter
的值。
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
查看properties中定义的resource.delimiter
可以看到分隔符被定义为@
了。
<properties>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.source>${java.version}</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
所以此时如果需要资源文件中的占位符能够正常被替换,需要改写为类似为app.version=@project.version@
形式。或者在自己的pom.xml中的properties元素下定义自己的resource.delimiter
,但是最好不要使用${}
,因为Spring自身的占位符也是${}
,如果有个资源文件中有个属性原本是期望Spring替换的,结果被Maven替换了就不好了。这也是Spring官方把它分开的原因。
通常使用Maven的filter时用来替换占位符的属性值不会直接定义在pom.xml中,而是定义在一个外部的properties文件中,此时可以通过filter元素进行引用。比如下面的配置指定了用来filter的属性值使用
src/main/resources/config.properties
文件(此时占位符中使用project的相关属性,比如project.version
也还是可以的,包括使用properties元素下定义的内部属性、系统属性等也是OK的)。<build> <filters> <filter>src/main/resources/config.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>Maven的filter一般会跟profile一起使用,基于不同的profile使用不同的属性配置文件来替换占位符,该工作也可以使用Spring的profile实现。
(注:本文基于Spring Boot 2.0.3所写)
相关推荐
通过使用Spring Initializr(***)或通过IDE创建Maven项目,添加Spring Boot的Maven依赖,然后创建一个主程序类来启动Spring Boot应用。 2. Spring Boot常用功能: - HelloWorld示例:通过新建Maven Java工程,添加...
在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...
**Spring Boot 集成 Shiro 深度解析** Spring Boot 是一款基于 Spring 的轻量级框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和...
在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...
5. **Spring Boot的起步依赖**:Spring Boot通过"起步依赖"(Starter POMs)简化了依赖管理,如spring-boot-starter-web引入了Spring MVC和Tomcat。 6. **Spring Data JPA**:Spring Data JPA是Spring提供的一个ORM...
根据提供的文件信息,可以看出这是一本关于Spring Boot的开源电子书的大纲与介绍部分。下面将根据这些信息生成相关的知识点。 ### Spring Boot 开源电子书1 #### 引入web模块 - **Spring Boot Web模块简介**:...
《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...
4. 过滤器(Filter):在Spring Boot应用中,过滤器用于在请求处理前和处理后进行预处理和后处理。你可以自定义过滤器实现诸如GZIP压缩、日志记录、字符集转换等功能,过滤器按照注册顺序依次执行。 5. 拦截器...
在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发能力而备受青睐,而Shiro则是一个轻量级的安全框架,用于实现用户认证、授权和会话管理。...
Spring Boot和Apache Shiro是两个常用的技术框架,它们可以协同工作,为应用程序提供强大的身份验证和授权功能。本篇文章将深入探讨如何利用Spring Boot的便捷性和Shiro的安全特性,构建一个完善的权限管理系统。 ...
Spring Boot 是一个基于Java的轻量级框架,它极大地简化了Spring应用的初始搭建以及开发过程。Druid,则是阿里巴巴开源的一个强大而全面的数据库连接池组件,它提供了监控、SQL解析、Web管理界面等功能,使得数据库...
1. 基于Spring Boot简化了大量项目配置和Maven依赖,让开发者更专注于业务开发。 2. 完善的日志记录体系可记录登录日志、业务操作日志(可记录操作前和操作后的数据)、异常日志到数据库。 3. 利用Beetl模板引擎对...
《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...
**Spring Boot JWT Demo详解** Spring Boot JWT(JSON Web Token)Demo是一个基于Spring Boot框架的简单应用,用于演示JWT技术在身份验证和授权中的应用。JWT是一种轻量级的身份验证标准,广泛应用于现代Web应用...
13.2.3. Using the Spring Boot Maven Plugin 13.3. Gradle 13.4. Ant 13.5. Starters 14. Structuring Your Code 14.1. Using the “default” Package 14.2. Locating the Main Application Class 15. ...
在Spring Boot的配置类中,配置ShiroFilter,定义过滤规则: ```java @Configuration public class ShiroConfig { @Autowired private MyRealm myRealm; @Bean public DefaultWebSecurityManager ...
在实际开发中,可能还需要集成其他组件,如Spring Security进行安全控制,或者使用Spring Boot简化配置。在项目迭代过程中,保持良好的代码组织和模块化设计,有助于提高项目的可维护性和扩展性。
1. **引入依赖**:在Spring Boot项目中,我们可以通过添加Shiro的Maven或Gradle依赖来引入所需库。例如,在Maven的pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.shiro <artifactId>shiro-spring ...
也可以通过`spring-boot-maven-plugin`或`spring-boot-gradle-plugin`构建可执行的war包,部署到外部Tomcat。 这个`spring-boot-04-servlet`项目可能包含了一个示例应用,演示了上述部分或全部知识点,通过查看源...