2013-02-22 10 views
23

Ich wollte einen Test zu meinem kleinen Projekt hinzufügen (bitte beachten Sie, dass ich einige Bits aus dem Code & geänderten Paketnamen entfernt habe, also falls es einen Fehler gibtMaven findet org.junit nicht, obwohl es in den Abhängigkeiten ist

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

} 

(ich habe auch versucht, von Testcase zu erweitern, um den statischen Import zu entfernen, aber es hat nicht geholfen)

nach mvn test läuft es zeigt mich ein:)); dies könnte es nicht sein, diese Fehler, dass es org.junit nicht finden konnte:

[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 

Mein pom.xml sieht wie folgt aus:

<?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 Abhängigkeit: Baum:

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

Bitte beachten Sie, dass ich bin kein Experte in Java oder in Maven, gerade angefangen (besonders mit Maven). Von dem, was ich von anderen Artikeln und Fragen gesehen habe, sollte ich meine Tests innerhalb src/test/java und meinen "echten" Code innerhalb src/main/java haben - ich habe es so gemacht.

Auch ich entfernte einmal den ganzen ~/.m2/Ordner und es hat immer noch nicht funktioniert.

Ich habe auch mvn test -X laufen, aber es hat mir nicht geholfen. Wenn ich es posten sollte, sag es mir bitte.

Antwort

39

Sie sollten Ihre <sourceDirectory> Einstellung im POM <build> Element nicht außer Kraft setzen, außer Sie haben einen guten Grund dazu. Dieses Attribut bestimmt, wo Maven nach Nicht-Test Code sucht. Der Standardwert für dieses Attribut ist src/main/java. Das <testSourceDirectory> Attribut legt den Pfad zu Test Code (wird standardmäßig src/test/java. Durch die Einstellung der <sourceDirectory> einfach src, Maven der Ansicht, dass gesamte Verzeichnis Hauptanwendungscode enthalten. Da das src Verzeichnis enthält src/test/java, Maven versucht dann, den Test zu kompilieren Code als Teil der Hauptanwendung.

Dies ist bedeutsam, weil, wenn die Hauptanwendung Kompilieren (während der compile Phase), läßt Maven Abhängigkeiten mit test Umfang. Prüfregeln in einer separaten Phase kompiliert wird (die test-compile Phase) nach dem Hauptkompilierung

Da Maven versuchte, Ihren Testcode als Teil der Hauptanwendung zu kompilieren, wurde die junit-Abhängigkeit weggelassen und sie waren nicht im Klassenpfad verfügbar. Die Lösung besteht darin, das Element <sourceDirectory> im POM einfach nicht anzugeben.

+0

vielen Dank!Das war wirklich das letzte woran ich gedacht habe und das ist völlig verständlich. Ich weiß nicht einmal, warum es so ist. Ich denke, Eclipse hat es so gemacht, als ich das neue Projekt erstellt und Maven hinzugefügt habe. Nochmals vielen Dank! –

2

sucht standardmäßig Maven auf diese Ordner für Java und Testklassen bzw. - src/main/java und src/test/java

Wenn die src mit den Testklassen unter Quelle und den Umfang für junit angegeben Abhängigkeit in pom.xml wird als Test erwähnt - org.unit wird von maven nicht gefunden.

Verwandte Themen