博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven filter不起作用
阅读量:5055 次
发布时间:2019-06-12

本文共 7633 字,大约阅读时间需要 25 分钟。

遇到的一个坑, spring boot + maven maven fileter没有起作用。spring boot把默认占位符改了

参考:

其中,pom.xml的内容如下:

 

  1.  
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3.  
    <modelVersion>4.0.0</modelVersion>
  4.  
     
  5.  
    <groupId>com.pp.test</groupId>
  6.  
    <artifactId>properties-test</artifactId>
  7.  
    <version>0.0.1-SNAPSHOT</version>
  8.  
    <packaging>jar</packaging>
  9.  
     
  10.  
    <name>properties-test</name>
  11.  
    <url>http://maven.apache.org</url>
  12.  
     
  13.  
    <parent>
  14.  
    <groupId>org.springframework.boot</groupId>
  15.  
    <artifactId>spring-boot-starter-parent</artifactId>
  16.  
    <version>1.5.9.RELEASE</version>
  17.  
    </parent>
  18.  
     
  19.  
    <properties>
  20.  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21.  
    <maven.compiler.source>1.8</maven.compiler.source>
  22.  
    <maven.compiler.target>1.8</maven.compiler.target>
  23.  
    <java.version>1.8</java.version>
  24.  
    </properties>
  25.  
     
  26.  
    <dependencies>
  27.  
    <dependency>
  28.  
    <groupId>org.springframework.boot</groupId>
  29.  
    <artifactId>spring-boot-starter-web</artifactId>
  30.  
    </dependency>
  31.  
    </dependencies>
  32.  
     
  33.  
    <build>
  34.  
    <filters>
  35.  
    <filter>src/main/profiles/profile-${profiles.active}.properties</filter>
  36.  
    </filters>
  37.  
    <resources>
  38.  
    <resource>
  39.  
    <filtering>true</filtering>
  40.  
    <directory>src/main/resources</directory>
  41.  
    </resource>
  42.  
    </resources>
  43.  
    </build>
  44.  
     
  45.  
     
  46.  
    <profiles>
  47.  
    <profile>
  48.  
    <id>dev</id>
  49.  
    <properties>
  50.  
    <profiles.active>dev</profiles.active>
  51.  
    </properties>
  52.  
    <activation>
  53.  
    <activeByDefault>true</activeByDefault>
  54.  
    </activation>
  55.  
    </profile>
  56.  
    <profile>
  57.  
    <id>test</id>
  58.  
    <properties>
  59.  
    <profiles.active>test</profiles.active>
  60.  
    </properties>
  61.  
    </profile>
  62.  
    <profile>
  63.  
    <id>prod</id>
  64.  
    <properties>
  65.  
    <profiles.active>prod</profiles.active>
  66.  
    </properties>
  67.  
    </profile>
  68.  
    </profiles>
  69.  
    </project>

 

 

application.properties 文件内容:

 

  1.  
    jdbc.driverClassName=
    ${jdbc.driverClassName}
  2.  
    jdbc.url=
    ${jdbc.url}
  3.  
    jdbc.username=
    ${jdbc.username}
  4.  
    jdbc.password=
    ${jdbc.password}

profile-dev.properties 文件内容:

 

 

  1.  
    jdbc.driverClassName=com.mysql.jdbc.Driver
  2.  
    jdbc.url=jdbc:mysql:
    ///db_users
  3.  
    jdbc.username=root
  4.  
    jdbc.password=root

启动应用,报错了,错误如下:

 

 

  1.  
    Caused by: java.lang.IllegalArgumentException: Circular placeholder reference
    'jdbc.url' in property definitions
  2.  
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:
    141) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  3.  
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:
    162) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  4.  
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:
    126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  5.  
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:
    236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  6.  
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:
    210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  7.  
    at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:
    227) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  8.  
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:
    84) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  9.  
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:
    61) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  10.  
    at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:
    527) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  11.  
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$
    1.getProperty(PropertySourcesPlaceholderConfigurer.java:132) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  12.  
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$
    1.getProperty(PropertySourcesPlaceholderConfigurer.java:129) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  13.  
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:
    81) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  14.  
    at org.springframework.core.env.PropertySourcesPropertyResolver.getPropertyAsRawString(PropertySourcesPropertyResolver.java:
    71) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  15.  
    at org.springframework.core.env.AbstractPropertyResolver$
    1.resolvePlaceholder(AbstractPropertyResolver.java:239) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  16.  
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:
    147) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  17.  
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:
    126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  18.  
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:
    236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  19.  
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:
    210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  20.  
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$
    2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  21.  
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:
    831) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  22.  
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:
    1086) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  23.  
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:
    1066) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  24.  
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:
    585) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  25.  
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:
    88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  26.  
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:
    366) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
  27.  
    ...
    17 common frames omitted

 

报这个错误的原因是,maven的filtering没有起作用,没有把占位符给替换掉。(大家可以执行mvn clean package,看看打包后的jar里面的application.properties文件,是否有替换占位符)

 

filtering无效的原因是,pom.xml继承了spring boot的依赖

 

  1.  
    <parent>
  2.  
    <groupId>org.springframework.boot</groupId>
  3.  
    <artifactId>spring-boot-starter-parent</artifactId>
  4.  
    <version>1.5.9.RELEASE</version>
  5.  
    </parent>

点开这个依赖的pom.xml,我们发现

 

 

spring boot把默认的占位符号${}改成了@

找到原因了,那怎么解决就很简单了。

 

方法一:

在pom.xml里面添加如下内容

 

  1.  
    <properties>
  2.  
    <resource.delimiter>${}</resource.delimiter>
  3.  
    </properties>

 

 

方法二:

application.properties里面不用${},改成@

 

  1.  
    jdbc.driverClassName=
    @jdbc.driverClassName@
  2.  
    jdbc.url=
    @jdbc.url@
  3.  
    jdbc.username=
    @jdbc.username@
  4.  
    jdbc.password=
    @jdbc.password@

方法三:

 

pom.xml不继承spring-boot-starter-parent,dependency里面配置全部的依赖和版本号(继承了之后,很多依赖不用写version)

 

方法四:

 

  1.  
    <parent>
  2.  
    <groupId>org.springframework.boot</groupId>
  3.  
    <artifactId>spring-boot-starter-parent</artifactId>
  4.  
    <version>1.5.9.RELEASE</version>
  5.  
    </parent>

改成

 

 

  1.  
    <dependencyManagement>
  2.  
    <dependencies>
  3.  
    <dependency>
  4.  
    <groupId>org.springframework.boot</groupId>
  5.  
    <artifactId>spring-boot-starter-web</artifactId>
  6.  
    <version>1.5.9.RELEASE</version>
  7.  
    <type>pom</type>
  8.  
    <scope>import</scope>
  9.  
    </dependency>
  10.  
    </dependencies>
  11.  
    </dependencyManagement>
  12.  

 

转载于:https://www.cnblogs.com/luckygxf/p/9528152.html

你可能感兴趣的文章
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>