1

(maven) 依存関係がランタイムまたはテストの範囲にないことを確認しながら、戦争に (maven) 依存関係を含めたいと思います。

問題は次のとおりです。

  1. 私の戦争で必要な瓶がたくさんあります(瓶A、B、Cとしましょう)。これは、CDI を使用しているためです。

  2. プロジェクトによって生成された戦争を使用する統合テストがいくつかあります。これらの統合テストは、arquillianベースのテストです。

  3. ただし、クラスパスに jar A、B、および C を含めることによって悪影響を受ける統合テストではない他のテストがあります。

4

4 に答える 4

4

war依存スコープではありません。有効なスコープは、、、、、providedです。それらの 1 つだけを選択できます。これらは唯一のオプションであり、いずれも範囲から除外されません。compileruntimetestsystemtest

于 2013-04-04T13:02:53.940 に答える
0

Good options:

Ah HA! It's possible to exclude certain dependencies from the test phase by using the surefire-plugin. That's described in this StackOverflow answer.

This way I can create my war and not have the dependencies in the test scope (thanks Peter Mularien)!

Bad options:

It looks like the maven assembly plugin requires you to have any include dependencies also available in a dependency scope. Since test is the smallest scope, it's impossible to include a dependency in your war without having it also be available on the test scope of the project.

The maven war plugin does not allow you to include (or exclude) dependencies.

Another other option is to create a second "distribution" module that includes the needed dependencies in it's pom. However, that means that the arquillian test is then referencing the previous build's war -- which is also not ideal.

Yet another option is to use Shrinkwrap to create a jar with tests and fork the JVM to run the "test" jar -- I've done this before when I needed to test my code with multiple ORM's (otherwise, having OpenJPA in your path conflicts with having Hibernate in your path, for example). But that disconnects your tests from your test framework (JUnit, TestNG, etc.) and makes the tests hard to debug.

于 2013-04-04T13:34:35.973 に答える