Un peu nouveau pour Java et Maven, mais j'essaie de faire en sorte que Maven gère les propriétés de connexion à la base de données afin que la construction maven puisse les changer entre les environnements dev/stage/prod et que je rencontre problèmes de filtrage et de ressources. Je ne sais pas non plus ce que je fais de mal ici.
Fichier POM:
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.comapny</groupId>
<artifactId>reporting</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>reporting</name>
<url>http://maven.Apache.org</url>
<properties>
<db.jdbcUrl>jdbc:aURL</db.jdbcUrl>
<db.jdbcUn>aUser</db.jdbcUn>
<db.jdbcPw>aPassword</db.jdbcPw>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springframework.version>4.2.3.RELEASE</springframework.version>
<springframework.jdbc.version>4.1.4.RELEASE</springframework.jdbc.version>
<hadoop.version>2.7.1.2.3.4.2-1</hadoop.version>
<hbase.version>1.1.2.2.3.4.2-1</hbase.version>
<phoenix.version>4.4.0.2.3.4.2-1</phoenix.version>
<junit.version>4.12</junit.version>
<mail.version>1.4.3</mail.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<repositories>
<repository>
<id>github-releases</id>
<url>http://oss.sonatype.org/content/repositories/github-releases/</url>
</repository>
<repository>
<id>clojars.org</id>
<url>http://clojars.org/repo</url>
</repository>
<repository>
<id>hortonworks</id>
<url>http://repo.hortonworks.com/content/repositories/releases/</url>
</repository>
<repository>
<id>Twitter4j</id>
<url>http://Twitter4j.org/maven2</url>
</repository>
</repositories>
<dependencies>
<!-- <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version> <scope>system</scope> <systemPath>${Java_HOME}/lib/tools.jar</systemPath>
</dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <version>1.2.3.RELEASE</version> -->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version>
<scope>system</scope>
<systemPath>${Java_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>org.Apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>${phoenix.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<!-- <exclusion> <artifactId>joda-time</artifactId> <groupId>joda-time</groupId>
</exclusion> -->
</exclusions>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- Hadoop Dependencies -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>6.1.26</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-sslengine</artifactId>
<version>6.1.26</version>
</dependency>
<dependency>
<groupId>org.Apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- HBase Dependcies -->
<dependency>
<groupId>org.Apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Other -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mailapi</artifactId>
<version>${mail.version}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>${mail.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- End of Other -->
<!-- Log4J 2.x 2.4.1 -->
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.github.omkreddy</groupId>
<artifactId>log4j2-kafka-appender</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.Apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.9.0.0</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showWarnings>false</showWarnings>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>db.properties</include>
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<includes>
<include>db.properties</include>
</includes>
</testResource>
</testResources>
</build>
db.properties
jdbc.url= ${db.jdbcUrl}
jdbc.username= ${db.jdbcUn}
jdbc.password= ${db.jdbcPw}
Maven version 3.3.8
JDK 1.8.0-72
Ligne de commande
mvn test -P development -X
Erreur
Java.lang.IllegalArgumentException: Could not resolve placeholder 'db.jdbcUrl' in string value "${db.jdbcUrl}"
Toute aide serait grandement appréciée.
Tout d'abord, vous n'avez pas besoin d'utiliser un profil. Les ressources db.properties
est une ressource de test, elle doit donc se trouver sous src/test/resources
et pas sous src/main/resources
. L'utilisation de profils compliquera votre construction, vous ne devriez y avoir recours qu'en dernière condition.
La raison pour laquelle vous rencontrez ce problème est que Spring Boot redéfinit le filtre de jetons pour qu'il soit @
au lieu de la valeur par défaut ${*}
. De les docs :
Si vous héritez du
spring-boot-starter-parent
POM, le jeton de filtre par défaut dumaven-resources-plugins
a été changé de${*}
à@
(c'est à dire.@maven.token@
au lieu de${maven.token}
) pour éviter les conflits avec les espaces réservés de style Spring. Si vous avez activé le filtrage maven pour leapplication.properties
directement, vous pouvez également modifier le jeton de filtre par défaut pour utiliser d'autres délimiteurs.
Cela signifie que vous devriez plutôt avoir:
jdbc.url= @db.jdbcUrl@
jdbc.username= @db.jdbcUn@
jdbc.password= @db.jdbcPw@
pour le db.properties
fichier.
Ensuite, vous devez supprimer votre <resources>
section et remplacez-la par:
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<includes>
<include>db.properties</include>
</includes>
</testResource>
</testResources>