我有一个项目MyProject,它依赖于另一个项目BaseProject中的配置。在BaseProject内部我依赖于许多不同的项目,如ErrorLogging,PerformanceLogging等...我希望能够构建顶级项目(MyProject)并让它过滤掉它作为依赖项的那些项目中的所有spring xml文件。我没有运气。我可以看到豆子,但他们没有被过滤。一些bean正在使用自己的poms中定义的默认过滤器进行过滤,但非使用MyProject中的过滤器。
MyProject - 包含过滤器文件,并从其他项目中导入配置。
BaseProject - 定义了需要过滤的spring bean。
ErrorLogging - 定义了需要过滤的spring bean。
当我从MyProject运行一个包时,所有spring文件都被正确提取到jar文件中,但它们仍然包含属性占位符值$ {error.logging.host},例如...... MyProject中的bean被正确过滤。另一种方法是在MyProject中定义bean,但是大约有10个项目使用BaseProject和它的bean,我不想在10个单独的项目中重新定义它们。
如果有人能对这个问题有所了解,那就太好了。感谢
编辑:
为了更清楚,我在项目ErrorLogging中有一个spring bean xml定义,名为errors-config.xml,它定义用于连接数据库的bean。这只是连接细节的占位符,应该由MyProject内部的filter.properties文件提供。
errors-config.xml作为资源导入baseproject-config.xml,它位于BaseProject内部。基础项目及其配置文件导入MyProject。
然后我使用Maven构建MyProject,我希望将errors-config.xml中的属性占位符替换为MyProject中filter.properties中的值。 MyProject可以成功过滤它自己的文件,但不能过滤ErrorsLogging项目的文件。 ErrorsLogging似乎从它自己的src / main / resources文件夹而不是MyProject的文件夹中获取过滤器。
答案 0 :(得分:1)
您可以使用PropertyOverrideConfigurer
覆盖初始属性。
例如,如果您在errors-config.xml
中有以下数据源定义:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${hibernate.driverClassName}" />
<property name="jdbcUrl" value="${hibernate.url}" />
<property name="user" value="${hibernate.username}" />
<property name="password" value="${hibernate.password}" />
</bean>
您可以在MyProject
上下文中覆盖数据库连接属性,如下所示:
<bean id="propertyOverideConfigurer" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="locations">
<list>
<value>filter.properties</value>
</list>
</property>
</bean>
在filter.properties
文件中,您需要指定要覆盖的bean名称和属性:
datasource.driverClass = oracle.jdbc.driver.OracleDriver
datasource.jdbcUrl = jdbc:oracle:thin:@localhost:1521:xe
datasource.user = username
datasource.password = password
希望这有帮助。
答案 1 :(得分:1)
您可以通过解压缩所有依赖项,过滤和打包来实现这一目标,整个过程取决于项目的结构,对于基本配置,这可能就足够了:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<!--unpack all the dependencies to the target of this project-->
<phase>initialize</phase>
<inherited>false</inherited>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>${pom.groupId}</includeGroupIds>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/${artifactId}</outputDirectory>
<includes>**/*.properties,**/*.xml</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>${config.maven.plattform.resources}/assembly/zip.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>zip</id>
<phase>package</phase>
<inherited>true</inherited>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
只要您正确定义了对资源的正确过滤(稍后会发生并使用maven-resources-plugin),这应该可以正常工作。