2016-05-05 15 views
2

テストが実行される前に、依存jarファイルのルートから現在のプロジェクトの出力ディレクトリのルートにリソースファイル(menu.xml)をコピーする必要がありますビルド中に。このファイルは、テストのために利用可能でなければならないが、後でメインプログラムのために...getClassLoader().getResourceAsStream("menu.xml")を使用して利用可能でなければならない。maven:依存jarからターゲットフォルダにリソースをコピーする

私は解決策をthis questionで提案しようとしていますが、機能しません。

これはPOMファイルがどのように見えるかです:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>resource-dependencies</id> 
     <phase>process-test-resources</phase> 
     <goals> 
      <goal>unpack-dependencies</goal> 
     </goals> 
     <configuration> 
      <type>jar</type> 
      <includeArtifactIds>pm1j-jar</includeArtifactIds> 
      <includes>menu.xml</includes> 
      <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

私はmvn clean process-test-resourcesを実行すると、私は次の出力を参照してください。

[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ pm1-config --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 3 resources 
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:unpack-dependencies (resource-dependencies) @ pm1-config --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 8.709 s 
[INFO] Finished at: 2016-05-05T15:01:06-03:00 
[INFO] Final Memory: 30M/458M 
[INFO] ------------------------------------------------------------------------ 

ファイルmenu.xmlがターゲットフォルダにコピーされていません。おそらく何が間違っているのかを私はどのように見ることができます私はデバッグログレベルでmavenを実行しようとしましたが、設定が正しく解析されているのがわかりましたが、プラグインは何が起こっているのかの追加情報を記録しません。

... 
[DEBUG] (f) includeArtifactIds = pm1j-jar 
[DEBUG] (s) includes = menu.xml 
... 
[DEBUG] (f) outputAbsoluteArtifactFilename = false 
[DEBUG] (s) outputDirectory = c:\Dev\workspaces\config\pm1j\pm1-config\target\classes 
... 
[DEBUG] (f) project = MavenProject: com.expersoft.pm1j:pm1-config:3-SNAPSHOT @ c:\Dev\workspaces\config\pm1j\pm1-config\ 
pom.xml 
[DEBUG] -- end configuration -- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 10.014 s 
[INFO] Finished at: 2016-05-05T15:09:29-03:00 
[INFO] Final Memory: 27M/328M 
[INFO] ------------------------------------------------------------------------ 
+0

は、依存するjarファイルのルートに直接あるmenu.xmlですか?依存関係リストにそのjarファイルがありますか? ** https://maven.apache.org/plugins/maven-dependency-plugin/unpack-dependencies-mojo.html#includesのドキュメントで**/menu.xmlのようなものを試したことがありますか?ファイルを読み込むととにかくクラスパスから、まったく解凍してしまいますか? – wemu

+0

なぜそれをする必要がありますか?あなたはそれをする必要はありません。リソースがクラスパス内のJARのルートにある場合は、クラスパスのルートにあります。したがって、あなたが望むものは、まったく役に立たないものです。したがって、あなたは何をしたいのですか?あなたが解決したい本当の問題は何ですか? – Tunaki

+0

はい、ファイルは依存するjarのルートにあります。私は今問題を理解しました。jarファイルは依存関係リストにありません。混乱は私が最初にリポジトリからjarをダウンロードするプラグインの** unpack **の目標を試したのでうまくいきました。うまくいきました。しかし、このケースでは、それは後のライフサイクル段階で起こるため、テスト用にファイルを使用することはできません。私は、以前の解決策に戻るべきだと思います。これは、他のプロジェクトのソースフォルダからmaven-resources-pluginを使ってファイルをコピーしていました。 – Alex

答えて

7

コメントの助けを借りて、問題を把握できました。 menu.xmlファイルを保持するjarは、私のプロジェクトの依存関係リストにありません。ここで

は私がよりよく理解するために達成しようとしたものの、より良い説明です:

私のプロジェクトでは、Mavenのマルチモジュールの内部にある、と私は別のプロジェクトに維持され、このmenu.xmlの情報が必要同じマルチモジュールこのファイルとは別に、この他のプロジェクトに依存することはありません。したがって、jarファイルへの依存もありません。

私のプロジェクトでファイルが重複するのを避けるために、これまでのところ、他のプロジェクトのソースディレクトリからファイルをコピーするmaven-resources-pluginを手伝ってくれました。私はこのソリューションを気に入ったことはありません。なぜなら、この他のプロジェクトのソースをファイルシステムに持つことに依存しているからです。

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy-resources</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.basedir}/src/main/resources</outputDirectory> 
      <resources>   
      <resource> 
       <directory>${project.basedir}/../pm1-jJar/src/main/resources</directory> 
       <includes> 
       <include>menu.xml</include> 
       </includes> 
      </resource> 
      </resources>    
     </configuration>    
     </execution> 
    </executions> 
    </plugin> 
その後 I discovered the maven-depency-plugin

はリポジトリからダウンロードしたjarファイルのうち、ファイルを抽出することができ目標を解凍します。これははるかにクリーンなソリューションのように見えました。私はそれを試して、それは実際にうまくいった。しかし、この解決策の問題は、アンパックプラグインがテスト後の後の段階でのみ動作し、ファイルを使用していくつかのテストがあることでした。

は、いくつかのより多くの研究の後、私はアンパック、依存関係を持つ完璧なソリューションのように見えたが、この段階では、私は完全に私が実際にjarファイルに依存関係を持っていないことを忘れていた目標をリソースの依存関係のプラグインを見つけました。

+0

このような状況を正確に処理するmaven-remote-resources-pluginを詳しく見てみましょう... – khmarbaise

関連する問題