10

Ant ビルドから Maven に変換中のエンタープライズ アプリケーションがあります。ほぼ完全に変換されています。これは私が修正する必要がある最後のものです。アプリケーションは、2 つの WAR を含む EAR ファイルとしてパッケージ化され、アプリケーションのすべてのコア機能を提供する JAR モジュールがあります。

私は Freemarker テンプレート ライブラリを使用して、特に、アプリケーションによって送信される自動メールのメッセージ本文を生成しています。Freemarker はその *.ftl テンプレート ファイルをクラスパスに配置する必要があります。これはコア アプリケーション機能であり、特定の WAR に固有のものではないため、JAR に配置する必要があります。

JAR を定義する Maven モジュールには、次の POM があります。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <relativePath>../../pom.xml</relativePath>
        <groupId>com.company.project</groupId>
        <artifactId>projectName</artifactId>
        <version>1.8.0</version>
    </parent>

    <artifactId>core</artifactId>
    <packaging>jar</packaging>
    <name>Core Application</name>

    <profiles>
       <!-- snip -->
    </profiles>

    <dependencies>
       <!-- snip -->
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.ftl</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <!-- snip -->
        </plugins>
    </build>
</project>

*.ftl ファイルは src/main/resources/template/ にあり、一部は template/ 内のサブディレクトリにあります。src/main/resources 内には他のファイルがあります。いくつかの .properties といくつかの .xml、いくつかはルートにあり、いくつかはディレクトリ構造の下にあります。

このモジュール (または親) でパッケージ フェーズを実行すると、ビルド プロセスの一部として作成された target/classes ディレクトリにテンプレート ディレクトリが含まれます。適切なディレクトリ構造を持つ .properties ファイル。このディレクトリを手動で JAR すると、すべてが完全に機能します。

これが奇妙で迷子になるところです。maven-jar-plugin が JAR を作成すると、XML ファイルとプロパティ ファイルが含まれますが、テンプレート ディレクトリは JAR に完全に存在せず、その内容はどこにも見つかりません。

上記のように、**/*.ftl を明示的にインクルードしてみました。違いはありません。「includes」タグ全体を除外すると、まったく同じ動作が得られます。

Maven 3.0.5 と maven-jar-plugin 2.4 を使用しています。

4

1 に答える 1

15

この質問を送信した後、私は正しい答えを見つけました。

親POMには、次のものがありました。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/*.class</include>
            <include>**/*.jdo</include>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
    </configuration>
</plugin>

**/*.ftlインクルードのリストに追加しましたが、今は機能しています。

編集:さらに良いことに、構成タグを完全に削除しましたが、まだ機能しています。クラスパスに必要な.propertiesファイルやその他のものは、src/main/javaではなくsrc/main/resourcesにある必要があることを理解する前の名残だったと思います。

于 2013-07-12T15:01:48.643 に答える