我正在尝试将我的资源复制到类路径中,具体取决于使用 maven 选择的配置文件。我的资源文件夹结构如下:
src/main/resources:
config
production
development
staging
我当前不工作的配置是
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
<property>
<name>envtype</name>
<value>dev</value>
</property>
</activation>
<build>
<finalName>Corelay</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>**/production/**</exclude>
<exclude>**/staging/**</exclude>
</excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>**/production/**</exclude>
<exclude>**/staging/**</exclude>
</excludes>
</testResource>
</testResources>
</build>
</profile>
在 config/hibernate/hibernate-config 下的休眠配置文件中.xml我从同一个包中请求一些属性
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:**/jdbc.properties</value>
<value>classpath*:**/hibernate.properties</value>
</list>
</property>
</bean>
但是有一个错误:
Could not resolve placeholder 'jdbc.driverClassName' in string value "${jdbc.driverClassName}"
此属性在该文件中定义。怎么了?另一个问题是如何使从这些配置文件文件夹复制的资源出现在完全相同的输出类路径结构中?我的意思是不应该有/production、/development 或/stageing:只是/env
我知道我可以将它们分开,但是如果有共享的(例如呈现的结构中的配置),我怎么也可以包含它?
src/main/resources 相同的级别创建一个文件夹 src/main/config。里面创建3个子文件夹,通用,开发和生产:
|__common
||__common.属性
|__dev
||__dev.属性
|__prod
||__prod.属性
然后配置两个配置文件:开发和生产:
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/config/common</directory>
</resource>
<resource>
<directory>src/main/config/dev</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<resources>
<resource>
<directory>src/main/config/common</directory>
</resource>
<resource>
<directory>src/main/config/prod</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
这样,mvn 全新安装会将 common.properties 和 dev.properties 复制到类路径的根目录,因为 dev 配置文件默认处于活动状态。
然后,mvn 全新安装 -Pprod 将安装 common.properties 和 production.properties,但不安装 dev.properties,以及类路径的根目录。