85

Maven を使用して単純な Java プロジェクトを構築しようとしています。私の pom ファイルでは、JUnit 4.8.2 を唯一の依存関係として宣言しています。それでも Maven は JUnit バージョン 3.8.1 の使用を主張しています。どうすれば修正できますか?

この問題は、「パッケージ org.junit が存在しません」というコンパイルの失敗に現れます。これは、ソース コードの import ステートメントが原因です。JUnit 4.* の正しいパッケージ名は org.junit.* ですが、バージョン 3.* では junit.framework.* です。

http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.htmlで問題の根本に関するドキュメントを見つけたと思いますが、そこにあるアドバイスは Maven の専門家向けのようです。何をすべきかわかりませんでした。

4

17 に答える 17

55

訪問者を支援するための完全なソリューションで答えを得るために:

必要なのは、junit 依存関係を に追加することだけですpom.xml。を忘れないでください<scope>test</scope>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
于 2013-07-11T18:30:13.973 に答える
47

@Dennis Roberts:あなたは絶対に正しかった:私のテストクラスはsrc / main/javaにありました。また、JUnitのPOMの「scope」要素の値は「test」でしたが、それが想定されている方法です。問題は、Eclipseでテストクラスを作成するときにだらしなく、src / test/javaではなくsrc/main/javaに作成されることでした。これは、「mvn eclipse:eclipse」を実行した後、Eclipseのプロジェクトエクスプローラービューで見やすくなりましたが、あなたのコメントが私が最初に見た理由でした。ありがとう。

于 2011-05-16T21:47:02.583 に答える
20

私の問題は私の中にある行pom.xmlでし<sourceDirectory>${basedir}/src</sourceDirectory>

于 2014-03-06T22:11:15.313 に答える
12

junitのpom.xmlでスコープタグを削除するとうまくいきました..

于 2015-01-19T06:13:11.847 に答える
5

pom.xmlこの依存関係をファイルに追加します。

http://mvnrepository.com/artifact/junit/junit-dep/4.8.2

<!-- https://mvnrepository.com/artifact/junit/junit-dep -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit-dep</artifactId>
    <version>4.8.2</version>
</dependency>
于 2013-08-02T12:33:03.463 に答える
5

私も同じ問題を抱えていました。私がしたことはすべて-pom.xmlファイルから、junit 3.8の依存関係を削除し、junit 4.8の新しい依存関係を追加しました。次に、maven clean と maven install を実行しました。それはトリックをしました。確認するために、maven のインストール後、project->properties-build path->maven 依存関係に移動し、junit 3.8 jar がなくなったことを確認しました!代わりに、junit 4.8 jar がリストされています。いいね!!。今、私のテストは魅力のように実行されます..これが何らかの形で役立つことを願っています..

于 2012-09-29T13:28:27.420 に答える
4

どのようにバージョンを宣言しましたか?

<version>4.8.2</version>

ここで説明されているこの宣言の意味に注意してください(注を参照)

Junitの3.8.2などの「通常の」バージョンを宣言する場合、内部的には「何でも許可しますが、3.8.2を優先します」と表されます。これは、競合が検出された場合、Mavenが競合アルゴリズムを使用して最適なバージョンを選択できることを意味します。[3.8.2]を指定すると、3.8.2のみが使用され、それ以外は使用されないことを意味します。

バージョン4.8.2を強制的に使用するには、

<version>[4.8.2]</version>

プロジェクトには他の依存関係がないため、問題の原因となる競合が発生することはありません。このバージョンをリポジトリから取得できる場合は、最初の宣言が機能するはずです。親pomから依存関係を継承しますか?

于 2011-05-04T19:41:20.293 に答える
3

依存関係を注入する親プロジェクトの子である「test-utils」プロジェクト (機能、ルール、およびアサーションを JUnit に追加する) で、非常によく似た問題が発生しました。org.junit.rules パッケージに依存するクラスは src/main/java にありました。

そこで、テストスコープなしでjunitへの依存関係を追加し、問題を解決しました:

test-util プロジェクトの pom.xml :

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
</dependency>

親プロジェクトの pom.xml :

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
</dependency>
于 2017-11-21T10:21:15.800 に答える
1

コードを正常にコンパイルする Eclipse の同様の問題がありましたが、JUnit が依存関係のリストにあり、テストが /src/test/java/ にあるにもかかわらず、毎回テストをコンパイルすると Maven が失敗しました。

私の場合、依存関係のリストに間違ったバージョンの JUnit がありました。JUnit4 テスト (注釈付き) を作成しましたが、依存関係として JUnit 3.8.x がありました。JUnit のバージョン 3.8.x と 4 の間で、パッケージ名が junit.framework から org.junit に変更されました。これが、Maven が JUnit jar を使用してコンパイルを中断する理由です。

Eclipse が正常にコンパイルされた理由は、まだ完全にはわかりません。クラスパスのどこかに JUnit4 の独自のコピーが必要です。この代替ソリューションが人々に役立つことを願っています。上記のアーサーのリンクをたどった後、この解決策にたどり着きました。

于 2011-09-26T13:05:48.730 に答える
0

junitバージョンを変更すると、これが修正されました。私の場合、バージョン 3.8.1 は機能しなかったようです。4.12に変更した際に修正された問題

于 2018-10-14T17:13:07.983 に答える
-1

デフォルトでは、maven はこれらのフォルダーをそれぞれ Java およびテスト クラス (src/main/java および src/test/java) で検索します。

ソースの下のテストクラスで src が指定され、pom.xml の junit 依存関係のスコープが test として言及されている場合、org.unit は maven によって検出されません。

于 2015-10-23T06:20:02.187 に答える