web-dev-qa-db-ja.com

Maven 3およびJUnit 4のコンパイルの問題:パッケージorg.junitは存在しません

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の専門家向けです。何をすべきか理解できませんでした。

71
Are Husby

@Dennis Roberts:まったくその通りでした。テストクラスはsrc/main/Javaにありました。また、JUnitのPOMの "scope"要素の値は "test"でしたが、それがそうであるはずです。問題は、Eclipseでテストクラスを作成するときにずさんだったため、src/test/Javaの代わりにsrc/main/Javaで作成されていたことです。これは、「mvn Eclipse:eclipse」を実行した後、Eclipseのプロジェクトエクスプローラービューで見やすくなりましたが、あなたのコメントが最初にそれを見るきっかけになりました。ありがとう。

43
Are Husby

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

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

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
45
Renato Lochetti

私の問題は、pom.xml内の行でした。この行を削除すると、<sourceDirectory>${basedir}/src</sourceDirectory>行が削除され、mavenが通常の構造フォルダーを使用するようになり、問題が解決しました

18
oak

junitのpom.xmlでscopeタグを削除しました。

この依存関係を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>
4
tokhi

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

<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から依存関係を継承していますか?

4
FrVaBe

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

3
Steer360

ファイルを正しい場所に置いて、JUnit依存関係エントリから<scope>test</scope>を削除するだけで問題が解決しました(JUnit 4.12を使用しています)。 testスコープでは、コンパイル段階で依存関係が無視されていたと思います。これで、mvn testを呼び出してもすべてが機能します。

2
mljrg

私の場合は単純な監視でした。

POMファイルの<dependencies>の代わりに<dependencyManagement/>ノードの下の<project/>内にJUnit依存関係宣言を配置しました。正しい方法は次のとおりです。

<project>
<!-- Other elements -->
    <dependencies>
    <!-- Other dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
<project>
2
White hawk

依存関係を注入する親プロジェクトの子である「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>
2
Bludwarf

また、この問題に遭遇しました-ソースからオブジェクトを取得しようとして、テストコードで動作していましたが、srcコードでは動作していませんでした。さらにテストするために、テストからコードのブロックをコピーしてsrcコードにドロップし、すぐにJUnitの行を削除して、テストがオブジェクトをどのようにプルするかを確認しました。その後、突然私のコードはコンパイルされません。
問題は、コードをドロップすると、Eclipseがすべてのクラスを有効に解決したため、srcコードからのJUnit呼び出しが発生することでしたが、これは適切ではありませんでした。未使用のインポートに関する上部の警告に気づいたはずですが、それらを表示するのを怠りました。
srcファイル内の未使用のJUnitインポートを削除すると、すべて正常に機能しました。

1
LConrad

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

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

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

1
BrionS

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

0
Vamsi Vegesna

私にも、以下に示すのと同じ問題がありました。

enter image description here

この問題を解決するには、アプリレベルbuild.gradleのdependenciesセクションに以下の行を追加します。

compile 'junit:junit:4.12'
androidTestCompile 'com.Android.support.test:runner:0.5'

その後、Gradleビルドは警告に従って報告しました。

Warning:Conflict with dependency 'com.Android.support:support-annotations'. 
Resolved versions for app (25.1.0) and test app (23.1.1) differ. 
See http://g.co/androidstudio/app-test-app-conflict for details.

この警告を解決するために、アプリレベルbuild.gradleに次のセクションが追加されます。

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-annotations:23.1.1'
    }
}
0
MNS

Src/main/Java Utilsにコードがある場合、このエラーの解決策を見つけてください

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.1</version>
</dependency>
0
hemraj chouhan