Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven doesn't find org.junit even though it's in the dependencies

Tags:

java

junit4

maven

I wanted to add a test to my small project (please note I removed some bits from the code & changed package names, so if there's any error you see regarding this it might be not this ;)):

package my.pckg;   import static org.junit.Assert.*;  import org.junit.After; import org.junit.Before; import org.junit.Test;   public class SignedRequestCallbackTest {       @Before     public void setUp() throws Exception {     }      @After     public void tearDown() throws Exception {     }      @Test     public void testCorrectSignedRequest() {         assertTrue(false);     }  } 

(I also tried to extend from TestCase in order to remove the static import but it didn't help)

After running mvn test it shows me an error that it couldn't find org.junit:

[INFO] Scanning for projects... [INFO]                                                                          [INFO] ------------------------------------------------------------------------ [INFO] Building Test Server 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO]  [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ server --- [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO]  [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ server --- [WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent! [INFO] Compiling 9 source files to /Users/michael/Projects/fbmuc/server/target/classes [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR :  [INFO] ------------------------------------------------------------- [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[4,27] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[6,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[7,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[8,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[14,9] cannot find symbol symbol  : class Before location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[18,9] cannot find symbol symbol  : class After location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[22,9] cannot find symbol symbol  : class Test location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[24,12] cannot find symbol symbol  : method assertTrue(boolean) location: class my.pckgSignedRequestCallbackTest [INFO] 9 errors  [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.161s [INFO] Finished at: Fri Feb 22 18:02:37 CET 2013 [INFO] Final Memory: 8M/81M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project server: Compilation failure: Compilation failure: [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[4,27] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[4,4] static import only from classes and interfaces [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[6,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[7,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[8,16] package org.junit does not exist [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[14,9] cannot find symbol [ERROR] symbol  : class Before [ERROR] location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[18,9] cannot find symbol [ERROR] symbol  : class After [ERROR] location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[22,9] cannot find symbol [ERROR] symbol  : class Test [ERROR] location: class my.pckgSignedRequestCallbackTest [ERROR] ~/code/src/test/java/my/pckg/SignedRequestCallbackTest.java:[24,12] cannot find symbol [ERROR] symbol  : method assertTrue(boolean) [ERROR] location: class my.pckgSignedRequestCallbackTest [ERROR] -> [Help 1] [ERROR]  [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR]  [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

My pom.xml looks like this:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.example</groupId>     <artifactId>server</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>TestServer</name>     <description>Test</description>     <build>         <sourceDirectory>src</sourceDirectory>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>2.3.2</version>                 <configuration>                     <source>1.6</source>                     <target>1.6</target>                 </configuration>             </plugin>             <plugin>                 <artifactId>maven-assembly-plugin</artifactId>                 <configuration>                     <descriptorRefs>                         <descriptorRef>jar-with-dependencies</descriptorRef>                     </descriptorRefs>                 </configuration>             </plugin>         </plugins>     </build>     <dependencies>         <!-- Facebook library -->         <dependency>             <groupId>com.restfb</groupId>             <artifactId>restfb</artifactId>             <version>1.6.11</version>         </dependency>         <!-- Gson: Java to Json conversion -->         <dependency>             <groupId>com.google.code.gson</groupId>             <artifactId>gson</artifactId>             <version>2.2.2</version>             <scope>compile</scope>         </dependency>         <!-- Tigase server snapshot -->         <dependency>             <groupId>tigase</groupId>             <artifactId>tigase-server</artifactId>             <version>5.2.0-SNAPSHOT</version>         </dependency>         <dependency>             <groupId>commons-codec</groupId>             <artifactId>commons-codec</artifactId>             <version>1.7</version>         </dependency>         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.11</version>             <scope>test</scope>         </dependency>     </dependencies>     <repositories>         <repository>             <id>tigase</id>             <name>Tigase repository</name>             <url>http://maven.tigase.org</url>         </repository>         <repository>             <id>tigase-snapshot</id>             <name>Tigase repository</name>             <url>http://build.xmpp-test.net/maven/</url>             <snapshots>                 <enabled>true</enabled>             </snapshots>         </repository>     </repositories> </project> 

mvn dependency:tree:

[INFO] Scanning for projects... [INFO]                                                                          [INFO] ------------------------------------------------------------------------ [INFO] Building Test Server 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO]  [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ server --- [INFO] my.pckg:server:jar:0.0.1-SNAPSHOT [INFO] +- com.restfb:restfb:jar:1.6.11:compile [INFO] +- com.google.code.gson:gson:jar:2.2.2:compile [INFO] +- tigase:tigase-server:jar:5.2.0-SNAPSHOT:compile [INFO] |  +- tigase:tigase-utils:jar:3.4.1-SNAPSHOT:compile [INFO] |  \- tigase:tigase-xmltools:jar:3.4.3-SNAPSHOT:compile [INFO] +- commons-codec:commons-codec:jar:1.7:compile [INFO] \- junit:junit:jar:4.11:test [INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.240s [INFO] Finished at: Fri Feb 22 18:07:55 CET 2013 [INFO] Final Memory: 5M/81M [INFO] ------------------------------------------------------------------------ 

mvn version:

Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100) Maven home: /usr/share/maven Java version: 1.6.0_41, vendor: Apple Inc. Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Default locale: de_CH, platform encoding: MacRoman OS name: "mac os x", version: "10.8.2", arch: "x86_64", family: "mac" 

Please note that I'm not an expert in java nor in maven, just getting started (especially with maven). From what I've seen from other articles and questions, I should have my tests within src/test/java and my "real" code within src/main/java - I have done it like this.

Also I removed once the whole ~/.m2/ folder and it still didn't work.

I also did run mvn test -X but it didn't help me. If I should post it please tell me so.

like image 453
Michael Weibel Avatar asked Feb 22 '13 17:02

Michael Weibel


People also ask

How do I fix Java package org JUnit does not exist?

The solution to this is to add junit library as dependency to the project. This can be done by adding junit to global library and then hovering over the error(junit word) and right clicking to add junit to class path.

Why your JUnit 4 tests are not running under Maven?

Until JUnit 4, Maven will only run the test classes which are marked as public. We should note, though, that this won't be an issue with JUnit 5+. However, the actual test methods should always be marked as public. Here, we can notice that the test method is marked as private.

How do I run a JUnit test in Maven?

We can run our unit tests with Maven by using the command: mvn clean test. When we run this command at command prompt, we should see that the Maven Surefire Plugin runs our unit tests. We can now create a Maven project that compiles and runs unit tests which use JUnit 5.


2 Answers

You shouldn't override your <sourceDirectory> setting in the POM's <build> element unless you have a good reason to. This attribute determines where Maven looks for non-test code. The default value for this attribute is src/main/java. The <testSourceDirectory> attribute sets the path to test code (this defaults to src/test/java. By setting the <sourceDirectory> to simply src, Maven considers that entire directory to contain main application code. Since the src directory contains src/test/java, Maven then tries to compile your test code as part of the main application.

This is significant because when compiling the main application (during the compile phase), Maven omits dependencies with test scope. Test code is compiled in a separate phase (the test-compile phase) after the main compile.

So since Maven tried to compile your test code as part of the main application, it omitted the junit dependency, and they weren't available on the classpath. The solution here is to simply not specify the <sourceDirectory> element in the POM.

like image 112
matts Avatar answered Oct 03 '22 17:10

matts


By default , maven looks at these folders for java and test classes respectively - src/main/java and src/test/java

When the src is specified with the test classes under source and the scope for junit dependency in pom.xml is mentioned as test - org.unit will not be found by maven.

like image 23
abhimanyu.varma Avatar answered Oct 03 '22 18:10

abhimanyu.varma