2013-06-22 2 views
20

Ho un (apparentemente) semplice problema di maven che non riesco a risolvere. Nel mio POM ho specificato una dipendenza per openrdf-sesamo in questo modo:Compilare Maven: il pacchetto non esiste

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-runtime</artifactId> 
    <version>2.7.2</version> 
</dependency> 

L'esecuzione del progetto da Eclipse funziona bene, posso anche esportare un file jar eseguibile. Purtroppo, non riesco a farlo funzionare correttamente tramite Maven di cmd-line. Per costruire un barattolo, ho aggiunto il seguente al mio pom:

<build> 
    <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> 
       <archive> 
        <manifest> 
         <mainClass>foo.bar.Cli</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

La compilazione fallisce con i seguenti errori:

.../PLDReducer.java:[25,29] package org.openrdf.rio.rdfxml does not exist 
.../PLDReducer.java:[27,33] package org.openrdf.sail.nativerdf does not exist 
.../LowPLDReducer.java:[25,29] package org.openrdf.rio.rdfxml does not exist 
.../Cli.java:[23,33] package org.openrdf.sail.nativerdf does not exist 
.../SchemaBuilder.java:[30,33] package org.openrdf.sail.nativerdf does not exist 
.../RepoQuerier.java:[23,33] package org.openrdf.sail.nativerdf does not exist 
.../PLDReducer.java:[78,44] cannot find symbol 

Stranamente, non appena aggiungo il plugin di compilazione per il pom e aggiorna le impostazioni del progetto, eclipse non sembra più compilare. Ho controllato il mio repository e tutti i file di sesamo sono lì.

mvn --version dà questo output:

Apache Maven 2.2.1 (rdebian-8) 
Java version: 1.6.0_27 
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux" version: "3.8.0-25-generic" arch: "amd64" Family: "unix" 

vedo che sembra indicare un JRE, ma il mio googling ha indicato che avrei visto un altro errore se il compilatore in sé non è stata trovata. Ho pasted the complete POM here, se è di qualche aiuto.

C'è qualcosa che mi manca? Non riesco a trovare alcun errore nel mio POM.

+0

Puoi mostrare l'intero output del pacchetto 'mvn clean'? – khmarbaise

+0

[Qui è con -e switch] (http://pastebin.com/zg24L8rS) e [Qui con -X switch] (http://pastebin.com/A5G613LL) – feob

+0

Sembra che stiate usando i nomi dei pacchetti (presumibilmente nella tua parte di importazione) che non esistono. Hai davvero bisogno di pacchetti di thoose? Usando le classi da esso? Pulito la parte di importazione con IDE (come Eclipse?)? Puoi mostrare uno dei file del codice sorgente come 'PLDReducer.java'? – khmarbaise

risposta

7

si deve aggiungere la seguente dipendenza alla vostra configurazione:

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-rio-api</artifactId> 
    <version>2.7.2</version> 
</dependency> 

Inoltre vorrei suggerire di dare uno sguardo in profondità nel documentation about how to use the lib.

+0

Grazie, questo in realtà ha fatto il trucco! Ma se è richiesto questo modulo aggiuntivo, come è possibile che il progetto venga compilato ed eseguito da all'interno di eclipse? Non ho nessun barattolo nella cartella lib o simile. Inoltre, il documento collegato sembra fantastico, non ho ancora trovato questo! – feob

+11

I pacchetti mancanti sono dipendenze di runtime, motivo per cui la compilazione dalla riga di comando ha esito negativo. Tuttavia, il plug-in Maven Eclipse tende a ignorare le regole di scoping e ad attirare ogni dipendenza, motivo per cui la compilazione di Eclipse funzionerà senza problemi. –

+0

Quale tipo di ambito hai definito? – khmarbaise

0

Non so se ci fosse stato il danneggiamento di file o cosa, ma dopo confermando la corretta configurazione di pom sono stato in grado di risolvere questo problema eliminando il jar dal mio repository m2 locale, costringendo Maven a scaricarlo di nuovo quando ho eseguito i test.

3

Non includere un tag <scope> nella dipendenza. Se si aggiunge, la vostra dipendenza diventa qualcosa di simile:

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-runtime</artifactId> 
    <version>2.7.2</version> 
    <scope> ... </scope> 
</dependency> 

Il tag "scope" dice Maven in quale fase della compilazione è necessario vostra dipendenza. Esempi per i valori da inserire sono "test", "fornito" o "runtime" (ometti le virgolette nel tuo pom). Non conosco la tua dipendenza, quindi non posso dirti quale valore scegliere. Si prega di consultare la documentazione di Maven e la documentazione della propria dipendenza.

+0

ha appena avuto lo stesso problema e ho rimosso il tutti insieme e ha costruito il progetto con successo. –