1

別のプロジェクト BaseProject の構成に依存するプロジェクト MyProject があります。BaseProject 内には、ErrorLogging、PerformanceLogging などのさまざまなプロジェクトへの依存関係があります。最上位のプロジェクト (MyProject) をビルドし、依存関係があるプロジェクト内のすべての spring xml ファイルをフィルター処理できるようにしたいと考えています。運が悪い。豆は見えますが、ろ過されていません。一部の Bean は、独自の pom で定義されたデフォルトのフィルターでフィルター処理されていますが、MyProject のフィルターを使用していません。

MyProject - これにはフィルター ファイルが含まれ、他のプロジェクトから構成をインポートします。

BaseProject - フィルタリングが必要な Spring Bean が定義されています。

ErrorLogging - フィルタリングが必要な Spring Bean が定義されています。

MyProject からパッケージを実行すると、すべての spring ファイルが jar ファイルに正しく抽出されますが、プロパティ プレースホルダー値 ${error.logging.host} が含まれています。たとえば、MyProject の Bean は正しくフィルター処理されます。これに代わる方法は、MyProject で Bean を定義することですが、BaseProject とその Bean を使用するこれらのプロジェクトが約 10 あり、10 の個別のプロジェクトでそれらを再定義する必要はありません。

誰かがこの問題に光を当てることができれば、それは素晴らしいことです. ありがとう

編集 :

これをより明確にするために、データベースに接続するための Bean を定義する errors-config.xml と呼ばれるプロジェクト ErrorLogging 内に Spring Bean xml 定義があります。これには、MyProject 内にある filter.properties ファイルによって提供される必要がある接続の詳細のプレースホルダーがあります。

errors-config.xml は、BaseProject 内にある baseproject-config.xml にリソースとしてインポートされます。ベース プロジェクトとその構成ファイルが MyProject にインポートされます。

次に、Maven を使用して MyProject をビルドし、errors-config.xml 内のプロパティ プレースホルダーを MyProject の filter.properties の値に置き換えたいと考えています。MyProject はそれ自身のファイルを正常にフィルタリングできますが、ErrorsLogging プロジェクトのファイルはフィルタリングできません。ErrorsLogging は、MyProject のフォルダーではなく、独自の src/main/resources フォルダーからフィルターを取得しているようです。

4

2 に答える 2

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も使用します)。

于 2012-10-10T17:07:56.480 に答える
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

お役に立てれば。

于 2012-10-08T19:06:00.720 に答える