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の専門家向けです。何をすべきか理解できませんでした。
@Dennis Roberts:まったくその通りでした。テストクラスはsrc/main/Javaにありました。また、JUnitのPOMの "scope"要素の値は "test"でしたが、それがそうであるはずです。問題は、Eclipseでテストクラスを作成するときにずさんだったため、src/test/Javaの代わりにsrc/main/Javaで作成されていたことです。これは、「mvn Eclipse:eclipse」を実行した後、Eclipseのプロジェクトエクスプローラービューで見やすくなりましたが、あなたのコメントが最初にそれを見るきっかけになりました。ありがとう。
訪問者を支援する完全なソリューションで答えを得るために:
必要なのは、pom.xml
にjunit依存関係を追加することだけです。 <scope>test</scope>
を忘れないでください
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
私の問題は、pom.xml
内の行でした。この行を削除すると、<sourceDirectory>${basedir}/src</sourceDirectory>
行が削除され、mavenが通常の構造フォルダーを使用するようになり、問題が解決しました
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>
バージョンをどのように宣言しましたか?
<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から依存関係を継承していますか?
同じ問題がありました。私がしたことはすべて-pom.xmlファイルからjunit 3.8の依存関係を削除し、junit 4.8の新しい依存関係を追加しました。次に、Mavenをクリーンにし、Mavenをインストールしました。それはトリックをしました。確認するには、mavenのインストール後、project-> properties-build path-> mavenの依存関係を調べ、junit 3.8 jarがなくなったことを確認しました!代わりに、junit 4.8 jarがリストされます。クール!!。今私のテストは魅力のように実行されます。これが何らかの形で役立つことを願っています。
ファイルを正しい場所に置いて、JUnit依存関係エントリから<scope>test</scope>
を削除するだけで問題が解決しました(JUnit 4.12を使用しています)。 test
スコープでは、コンパイル段階で依存関係が無視されていたと思います。これで、mvn test
を呼び出してもすべてが機能します。
私の場合は単純な監視でした。
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>
依存関係を注入する親プロジェクトの子である「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>
また、この問題に遭遇しました-ソースからオブジェクトを取得しようとして、テストコードで動作していましたが、srcコードでは動作していませんでした。さらにテストするために、テストからコードのブロックをコピーしてsrcコードにドロップし、すぐにJUnitの行を削除して、テストがオブジェクトをどのようにプルするかを確認しました。その後、突然私のコードはコンパイルされません。
問題は、コードをドロップすると、Eclipseがすべてのクラスを有効に解決したため、srcコードからのJUnit呼び出しが発生することでしたが、これは適切ではありませんでした。未使用のインポートに関する上部の警告に気づいたはずですが、それらを表示するのを怠りました。
srcファイル内の未使用のJUnitインポートを削除すると、すべて正常に機能しました。
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の独自のコピーが必要です。この代替ソリューションが人々に役立つことを願っています。上記のアーサーのリンクをたどった後、このソリューションに到達しました。
Junitのバージョンを変更すると、これが修正されました。私の場合、バージョン3.8.1は機能しなかったようです。 4.12に変更すると修正された問題
私にも、以下に示すのと同じ問題がありました。
この問題を解決するには、アプリレベル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'
}
}
Src/main/Java Utilsにコードがある場合、このエラーの解決策を見つけてください
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.1</version>
</dependency>