1

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 の下の hibernate 構成ファイルで、同じパッケージからいくつかのプロパティを要求します

<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}"

このプロパティはそのファイルで定義されています。どうしたの?もう 1 つの質問は、これらのプロファイル フォルダーからコピーされたリソースをまったく同じ出力クラスパス構造に表示する方法です。つまり、 /production 、 /development 、または /staging はありません。 /env だけです。

それらを別々に入れることができることは知っていますが、共有されているもの(提示された構造の構成など)がある場合、どうすればそれを含めることができますか?

4

1 に答える 1

1

src/main/resources と同じレベルにフォルダー src/main/config を作成します。内部に、common、dev、および production の 3 つのサブフォルダーを作成します。

| | _ _共通

| | | | _ _common.properties

| | _ _dev

| | | | _ _dev.properties

| | _ _製品

| | | | _ _prod.properties

次に、dev と production の 2 つのプロファイルを構成します。

<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 clean install は common.properties と dev.properties をクラスパスのルートにコピーします。これは、dev プロファイルがデフォルトでアクティブになっているためです。

mvn clean install -Pprod は common.properties と production.properties をインストールしますが、dev.properties はインストールせず、クラスパスのルートにもインストールします。

于 2013-11-07T22:26:30.913 に答える