2

フィルタを使用して簡単な ear プロジェクトを作成しました。環境ごとに異なる設定を使用したいのですが、これらの設定は生成されapplication.xmlたファイルに env-entries の形式で渡す必要があります。ear パッケージの生成は、以下に示すようにmaven-ear-pluginで行われます。

        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <generateApplicationXml>true</generateApplicationXml>
                <version>6</version>
                <envEntries>
                    <env-entry>
                        <env-entry-name>customProperty</env-entry-name>
                        <env-entry-type>java.lang.String</env-entry-type>
                        <env-entry-value>${custom.property}</env-entry-value>
                    </env-entry>
                </envEntries>
                <applicationName>${custom.property}</applicationName>
            </configuration>
        </plugin>

そのためには、別のプラグインproperties-maven-pluginを使用する必要がありました。ファイルからプロパティを正常に読み取り、maven プロジェクトのプロパティとして設定するので、.xml を使用して pom.xml ファイルに挿入できます${}。ほとんどの pom.xml 要素で機能します (つまり<applicationName>、残念ながら、要素内に配置すると、必要な場所で正常に検索されませんenv-entry。以下が生成されapplication.xmlます。

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
    <application-name>default property</application-name>
    <display-name>test</display-name>
    <env-entry>
        <env-entry-name>customProperty</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>${custom.property}</env-entry-value>
    </env-entry>
</application>

おそらくMaven Ear Pluginで発行されるはずのバグですが、私はそこにアカウントを持っていません。誰かが自分で確認したい場合は、アーカイブされたmavenプロジェクトも添付しています: test.zip

編集

ユーザー@ skegg99が提案したように作成された後、ファイルを使用maven-resource-pluginしてフィルター処理することで、この問題を克服することができました。このファイルを置き換えることができないため、META-INF ディレクトリにコピーする必要がありました。私はきれいに見えませんが、今のところ問題は解決しています。の追加マークアップは次のとおりです。application.xmlmaven-resource-plugin

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <outputDirectory>${basedir}/target/${project.artifactId}-${project.version}/META-INF</outputDirectory>
                <filters>
                    <filter>src/main/filters/${env}.properties</filter>
                </filters>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

そしてここにも:

    <resources>
        <resource>
            <directory>${basedir}/target</directory>
            <filtering>true</filtering>
            <includes>
                <include>application.xml</include>
            </includes>
        </resource>
    </resources>

プロジェクト全体の構成は、ここからダウンロードできます。

4

1 に答える 1

1

現在のセットアップでは、これはおそらく不可能です。

env エントリがPlexusConfigurationを介してロードされることを示すコードを簡単に調べました。

そのコードも深く掘り下げることなく、この部分が「XML を読み取り、リストに入れる」よりも特別なエントリを処理していることはわかりません。

于 2014-05-19T12:47:52.000 に答える