sim*_*mon 5 java spring maven-2 properties file
我有一个使用Maven配置的Java Spring项目.随着单元测试及其配置文件的数量快速增加,我正在尝试将测试配置集中到一个属性文件(同一个属性文件,用于构建项目).
单元测试位于树中(当然相对于项目路径)
src/test/java/com (...)
这些测试的资源文件位于
src/test/resources(...)
最后,资源文件应该读取的属性文件位于目录中
src/main/filters
现在,我有一个Junit类,我在其中指定配置文件位置,如下所示:
@ContextConfiguration(locations = { "classpath:com/initrode/quartz/SyncManagerJobTest-context.xml"})
Run Code Online (Sandbox Code Playgroud)
在配置文件SyncManagerJobTest-context.xml中有一行
<context:property-placeholder location="/src/main/filters/deploy.local.properties"/>
Run Code Online (Sandbox Code Playgroud)
这导致从目录中读取属性文件.我想读的是属性文件,它位于src/main/filters下.我尝试使用../../向上遍历目录,但这没有帮助.使用classpath:也没有用.我可以使用带有"file:"的绝对路径,但这需要项目中的每个开发人员修改配置,这也不好.
总而言之,问题是:如何强制src/test/resources /中的配置文件读取src/main/filters中的属性文件?
还有一个相关的奖励问题:在Java环境中处理文件时,是否还有其他修饰符而不是"file:"和"classpath:"?
如果指定src/main/filters为资源位置,Maven会将资源移动到target/classes,并在构建期间将类编译到同一位置.然后,您没有相对路径来处理,因为它们具有相同的根.如果您不这样做,您的过滤器目录将不会包含在构建中.
更新:当然,您的测试代码将输出到目标/测试类,因此为了简化测试,您可以指定在process-test-resources阶段src/main/filters复制target/test-classes的测试代码.我修改了示例以显示该行为.
如果您还没有这样做,可以使用build-helper-maven-plugin将filters文件夹添加为资源位置.
这样做的配置如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-resource</id>
<phase>process-test-sources</phase>
<goals>
<goal>add-test-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>scr/main/filters</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
对我来说,src/main/filters如果您不打算将此文件用作...过滤器,则放置属性文件听起来有点奇怪.如果此文件用作标准测试资源,为什么不将其放入src/test/resources?如果要过滤某些资源文件,为什么不这样做并使用过滤后的资源?我希望看到类似的东西:
<build>
<!-- Filter resources -->
<filters>
<filter>src/main/filters/my-filter.properties</filter>
</filters>
<!-- Resources for src/main -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- Resources for src/test -->
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>
Run Code Online (Sandbox Code Playgroud)
我可能会遗漏一些东西,但我认为你正在混合一些概念.在您的情况下(如果我理解您正在尝试做什么),我将使用maven配置文件和过滤器来管理多个环境部署.看一下:
| 归档时间: |
|
| 查看次数: |
7551 次 |
| 最近记录: |