1

mavenリソースフォルダーの構成ファイルを除くすべての依存関係をjarファイルに含めるためのプラグイン/プラグインのセットを検索しました。

assemblyプラグインはすべてのアセンブリを含めるための優れたソリューションであることがわかりました。タグresourcesexcludeタグを使用して、構成ファイルを除外しました。

しかし、問題は、これらのファイルを jar ファイルの隣のフォルダーにコピーするにはどうすればよいかということです。

つまり、単一の jar (すべての依存関係を含む) と構成 (.xml、.properties ファイル) を含むフォルダーが必要な場合はどうすればよいですか。したがって、実行したい場合は、構成フォルダーをクラスパスに追加して、jar ファイルを実行するだけです。

ありがとう、

PS 明確に受け入れられた回答を持つ重複した質問を見つけた場合は、感謝します。

4

1 に答える 1

0

次のように、記述子 XML ファイルで形式を「dir」に設定することにより、maven-assembly-plugin からディレクトリ出力を取得できます。

<assembly>
    <formats>
        <format>dir</format>
    </formats>
    .....
</assembly>

次に、dependencySets と fileSets を使用して、必要なファイルを含めたり除外したりします。

構成ファイルだけのディレクトリを取得するには、fileSet を使用して、必要なファイルのみをこの新しいディレクトリに含めます。

2 番目のアセンブリ記述子を使用して、構成ファイルを除外する jar を作成し、ディレクトリと jar の両方をクラス パスに含めることができます。

同じプラグインを 2 回実行するには、次のようにします。

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-assembly-plugin</artifactId>
     <executions>
         <execution>
             <id>config-dir</id>
             <configuration>
                 ....
             </configuration>
         </execution>
         <execution>
             <id>jar-without-config</id>
             <configuration>
                 ....
             </configuration>
         </execution>
     </executions>
 </plugin>

詳細については、こちらを参照してください。

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

代替実装

これはあなたの質問の範囲を超えており、別の質問により適していますが、より良い代替手段は、Spring のようなフレームワークを使用して、外部構成ファイルが内部にあるものをオーバーライドできるようにすることだと思います。その場合、デフォルトの jar を使用できますテンプレート構成ファイルの除外について心配する必要はありません。たとえば、Spring では次のようなことができます。

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:/myproject/defaults.properties</value
            <value>file:${user.home}/myproject.properties</value>
        </list>
    </property>
</bean>

これにより、内部の 'defaults.properties' が jar から読み込まれ、次にホーム ディレクトリから 'myproject.properties' が読み込まれます。myproject.properties に設定された値は、defaults.properties に設定された値をオーバーライドします。

それが役立つことを願っています。

于 2013-12-30T17:27:35.167 に答える