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

java, junit4, maven

Solution

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.

Problem

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.

Original source