web-dev-qa-db-fra.com

Maven ne trouve pas org.junit même s'il se trouve dans les dépendances

Je voulais ajouter un test à mon petit projet (veuillez noter que j'ai supprimé quelques bits du code et changé les noms de package, donc s'il y a une erreur que vous voyez à ce sujet, ce n'est peut-être pas le cas;)):

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);
    }

}

(J'ai également essayé d'étendre à partir de TestCase afin de supprimer l'importation statique, mais cela n'a pas aidé)

Après avoir exécuté mvn test il me montre une erreur qu'il n'a pas pu trouver 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

Mon pom.xml ressemble à ceci:

<?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>

dépendance mvn: arbre:

[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] ------------------------------------------------------------------------

version mvn:

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"

Veuillez noter que je ne suis pas un expert en Java ni en maven, juste pour commencer (en particulier avec maven). D'après ce que j'ai vu d'autres articles et questions, je devrais avoir mes tests dans src/test/Java et mon "vrai" code dans src/main/Java - Je l'ai fait comme ça.

J'ai également supprimé une fois le dossier ~/.m2/et cela n'a toujours pas fonctionné.

J'ai aussi couru mvn test -X mais cela ne m'a pas aidé. Si je devais le poster, dites-le moi.

26
Michael Weibel

Vous ne devez pas remplacer votre <sourceDirectory> réglage dans le POM <build> élément sauf si vous avez une bonne raison de le faire. Cet attribut détermine où Maven recherche le code non-test. La valeur par défaut de cet attribut est src/main/Java. Le <testSourceDirectory> l'attribut définit le chemin d'accès au code test (par défaut, src/test/Java. En définissant le <sourceDirectory> simplement src, Maven considère que tout le répertoire contient le code principal de l'application. Étant donné que le répertoire src contient src/test/Java, Maven essaie ensuite de compiler votre code de test dans le cadre de l'application principale.

Ceci est important car lors de la compilation de l'application principale (pendant la phase compile), Maven omet les dépendances avec la portée test. Le code de test est compilé dans une phase distincte (le test-compile phase) après la compilation principale.

Donc, depuis que Maven a essayé de compiler votre code de test dans le cadre de l'application principale, il a omis la dépendance junit, et ils n'étaient pas disponibles sur le chemin de classe. La solution ici est simplement de ne pas spécifier le <sourceDirectory> élément dans le POM.

40
matts

Par défaut, maven examine ces dossiers pour Java et classes de test respectivement - src/main/Java et src/test/Java

Lorsque le src est spécifié avec les classes de test sous source et la portée de la dépendance junit dans pom.xml est mentionnée comme test - org.unit ne sera pas trouvé par maven.

3
abhimanyu.varma