2013-02-22 8 views
23

Volevo aggiungere un test al mio piccolo progetto (si noti che ho rimosso alcuni bit dal codice & cambiato i nomi dei pacchetti, quindi se c'è qualche errore che si vede riguardo questo potrebbe non essere presente;)):Maven non trova org.junit anche se è nelle dipendenze

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

} 

(ho anche cercato di estendersi da TestCase al fine di rimuovere l'importazione statica, ma non ha aiutato)

Dopo aver eseguito mvn test me uno si mostra errore che non è stato possibile trovare nell'unità:

[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 

mio pom.xml si presenta così:

<?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 dipendenza: albero: versione

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

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" 

Si prega di notare che io non sono un esperto in java né in maven, appena iniziato (specialmente con Maven). Da quello che ho visto da altri articoli e domande, dovrei avere i miei test entro src/test/java e il mio codice "reale" entro src/main/java - L'ho fatto in questo modo.

Inoltre ho rimosso una volta l'intera ~/.m2/cartella e ancora non ha funzionato.

Ho anche eseguito mvn test -X ma non mi ha aiutato. Se dovessi postarlo, per favore dimmelo.

risposta

39

Non è necessario eseguire l'override dell'impostazione <sourceDirectory> nell'elemento <build> del POM, a meno che non si abbia una buona ragione per farlo. Questo attributo determina dove Maven cerca il codice non test. Il valore predefinito per questo attributo è src/main/java. L'attributo <testSourceDirectory> imposta il percorso per codice di prova (il valore predefinito per src/test/java. Impostando il <sourceDirectory> semplicemente src, Maven ritiene che tutta la directory per contenere codice dell'applicazione principale. Dato che la directory src contiene src/test/java, Maven quindi tenta di compilare il test codice come parte dell'applicazione principale.

Questo è importante perché quando si compila l'applicazione principale (durante la fase compile), Maven omette dipendenze con test portata. codice di prova viene compilato in una fase separata (la test-compile fase) dopo la compila principale

Quindi, poiché Maven ha provato a compilare il codice di test come parte dell'applicazione principale, ha omesso la dipendenza junit e non erano disponibili sul classpath. La soluzione qui è semplicemente non specificare l'elemento <sourceDirectory> nel POM.

+0

grazie mille!Questa è stata davvero l'ultima cosa a cui ho pensato ed è completamente comprensibile. Non so nemmeno perché sia ​​così ... Immagino che Eclipse l'abbia fatto mentre creavo il nuovo progetto e aggiungevo il maven ad esso .. grazie ancora! –

2

Per impostazione predefinita, Maven guarda a queste cartelle per le classi Java e di prova, rispettivamente - src/main/java e src/test/java

Quando lo src è specificato con le classi di test sotto fonte e le possibilità di JUnit la dipendenza in pom.xml è menzionata come test - org.unit non verrà trovata da Maven.