1

戦争としてパッケージ化されている別のMavenプロジェクトからwebapp/WEB-INF/リソースをコピーする必要があるMavenプロジェクトがあります。どうすればいいのですか ?提案してください

4

3 に答える 3

1

私はいくつかの選択肢を見ることができます:

  1. バージョン管理システムで外部参照を使用して、すべてのリポジトリが同じファイルを指すようにします。
  2. Maven依存関係モジュールは、プロジェクトの依存関係をコピーして解凍できます。そこから、Mavenアセンブリプラグイン(またはAntターゲット)を使用して、その依存関係の一部を自分のインストールに含めることができます。
  3. 少なくともFTLファイルの場合は、それらを別のJarファイルにパッケージ化してから、クラスローダーを介してリソースとしてロードすることができます。

リソースがフィルタリングされている場合、フィルタリングされたバージョンが必要な場合はソリューション1で、ソースバージョンが必要な場合は2、3で問題が発生する可能性があります。

お役に立てれば。

于 2012-05-31T09:05:54.037 に答える
1

Bittranceが言ったように、Maven依存関係プラグインを使用する必要があります。

より良い方法は、すべての共有リソースを含むプロジェクトを作成することです。おそらく、タイプzipであり、アセンブリプラグインで構築されます。これは良い「MavenWay」です。戦争を解くよりも良い解決策です。

次に、それを参照してください

    <dependency>
        <groupId>com.mygroup/groupId>
        <artifactId>my-dependencies</artifactId>
        <version>1.0.0</version>
        <type>zip</type>
    </dependency>

次に、maven依存関係プラグインを使用して、選択したディレクトリ(おそらくWEB-INF /?)でリソースを解凍します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
       <execution>
           <id>unpack-cfg-test-resources</id>
           <goals>
                <goal>unpack-dependencies</goal>
           </goals>
           <phase>resources</phase>
              <configuration>
                <outputDirectory>${project.build.directory}/WEB-INF/</outputDirectory>
                                <includeArtifacIds>my-resources</includeArtifacIds>
                <excludeTypes>pom</excludeTypes>
                <excludeTransitive>true</excludeTransitive>
            </configuration>
        </execution>
     </executions>
 </plugin>

このコードスニペット(別の目的で作成されたもの)についてはよくわかりませんが、これは例です。詳細については、次のリンクをたどってください:http: //maven.apache.org/plugins/maven-dependency-plugin/

ファイルを含む共通プロジェクトを共有できない場合は、ftl(または必要なもの)のみを含むwarを解凍できますが、これは本当にクリーンなソリューションではありません;)

このテーマを扱った投稿はたくさんあります: mavenの依存関係を解凍し ます...キーワードmaven-dependency-plugin、unpackを試してみてください:)

それがあなたを助けることを願っています。

于 2012-06-04T20:13:08.383 に答える
0

(これは、依存プロジェクトがjava(jar)であり、別のWebアプリではないことを前提としています。Webアプリの場合、ソリューションは類似していると思います)。

(少し)異なるアプローチを提案
します。戦争からリソースを読み取る代わりに、これを戦争pomに追加して、アーティファクトと戦争でjarを生成します。

<!-- maven war plugin config -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
    <configuration>
        ...
        <attachClasses>true</attachClasses>
        <classesClassifier>some-string</classesClassifier>
    </configuration>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
</plugin>
...
<resources>
<!-- This is for inclusion in the jar, so dependent module can load it -->
    <resource>
        <targetPath>some-path</targetPath>
        <directory>src/main/webapp/path...</directory>
        <includes>
            <include>your-resource</include>
        </includes>
    </resource>
</resources>

そして、これを消費するpomに送信すると、生成されたjarがロードされます。

<dependency>
    <groupId>com.company</groupId>
    <artifactId>...</artifactId>
    <classifier>some-string</classifier>
</dependency>

その後、通常の方法でリソースをロードできるようになります(getResourceAsStream("some-path/your-resource")

于 2017-07-19T08:11:14.207 に答える