2012-09-25 9 views
13

Io uso Apache Maven per gestire le mie librerie Java (jar) e alcuni progetti che usano le librerie. Per motivi di convenienza, utilizzo mvn eclipse:eclipse per generare file di progetto Eclipse che possono essere importati nell'area di lavoro di Eclipse per la modifica.Come dire a Maven di includere la dipendenza jar, non la directory sorgente del sottoprogetto in Eclipse?

I problemi sorgono quando si modifica il progetto principale ei progetti di lib Java nello stesso spazio di lavoro di Eclipse. Vale a dire, mvn eclipse:eclipse include percorso src dipendenza nel file .classpath, non la dipendenza jar come previsto.

Supponiamo di avere un progetto di libreria Java denominato mylib. Il file jar corrispondente mylib.jar è stato distribuito su un repository Maven privato gestito da me. Per utilizzare mylib.jar nel progetto principale, la seguente dipendenza è inclusa in pom.xml.

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
</dependency> 

mvn compile e mvn test lavoro perfetto, in cui mylib.jar viene scaricato automaticamente dal mio repo. Tuttavia, quando provo mvn eclipse:eclipse, trovo che il file .classpath generato non include la dipendenza mylib.jar come previsto. Invece, include la directory dei file di origine per mylib come segue.

<!-- .classpath file generated by mvn eclipse:eclipse --> 
<classpathentry kind="src" path="/mylib"/> 

Sembra che Maven legge i metadati di Eclipse e trova mylib e le principali coexits progetto nella stessa area di lavoro. Pertanto, Maven include la fonte del mio bene. Dannazione. Come posso dire a Maven di ignorare l'origine del progetto locale e includere solo il file jar?

+0

Perché don' t invece usi il plugin Eclipse di m2e? –

+1

Perché mi sento a mio agio a digitare i comandi nella console: la compilazione, il test, il packaging sono tutti eseguiti in un unico comando. Inoltre, utili segmenti di configurazione in pom.xml possono essere facilmente riutilizzati in altri progetti. Eclipse è buono, ma troppi menu e numerosi plug-in mi sembrano complicati. –

+0

I due non sono necessariamente mutuamente esclusivi, anche se dovresti rinunciare al plugin Maven Eclipse per usare m2e. Trovo Eclipse conveniente per il debugging e m2e garantisce che il processo di compilazione sia il più simile possibile all'interno e all'esterno di Eclipse. –

risposta

12

Credo che questo sia in realtà perché sono progetti correlati in Eclipse. Quindi, se fai clic con il pulsante destro del mouse sul progetto principale e vai a Project References, il tuo progetto lib dovrebbe essere spuntato.

Se si esegue mvn eclipse:eclipse, esso aggiungerà automaticamente riferimenti di progetto per qualsiasi sottoprogetto (modulo). Puoi cambiarlo con la proprietà useProjectReferences del plug-in eclipse di maven.

Il valore predefinito è true, ma

Quando è impostato su false, il plugin non creare sotto-progetti e invece riferimento quei sotto-progetti che utilizzano il pacchetto installato nel repository locale

Per utilizzare la proprietà, è possibile impostare la proprietà nel pom.xml

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <useProjectReferences>false</useProjectReferences> 
      </configuration> 
     </plugin> 
    <plugins> 
<build> 

O come una proprietà sulla riga di comando:

mvn eclipse:eclipse -Declipse.useProjectReferences=false 
0

Eclipse deve conoscere il percorso del repository di esperti locale. Pertanto la variabile classpath M2_REPO deve essere impostata. Eseguire il seguente comando:

mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo 

È possibile anche definire una nuova variabile classpath all'interno di Eclipse: Dalla barra dei menu, selezionare Window > Preferences. Select the Java > Build Path > Classpath Variables page.

quindi generare il progetto eseguendo mvn eclipse:eclipse

Speranza che aiuta!

0

Grazie per i suggerimenti di Hound Dog. Sì, useProjectReferences controlli Maven come gestire i progetti secondari, inclusa la directory di origine o inclusi i file jar.

Non ho installato il plug-in Maven per Eclipse, quindi aggiungo la seguente configurazione in pom.xml. Indica a Maven di includere la dipendenza da jar nel repository di Maven locale, non nella directory di origine. Se il file jar richiesto non è presente nel repository locale, verrà scaricato automaticamente al volo.

<!-- pom.xml for the main project: include jar, not src path --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
      <useProjectReferences>false</useProjectReferences> 
    </configuration> 
    </plugin> 

Ora mvn eclipse:eclipse funziona come previsto.

+0

Ho aggiornato la mia risposta per riflettere questo, così come la riga di comando alternativa. Se sei soddisfatto, non dimenticare di selezionarlo come risposta corretta :) –

0

solo provare utilizzando l'elemento tipo dentro la dipendenza di tag e la menzione source/vaso come tipo nel vostro pom.xml

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
    <type>jar<type> <!-- source/jar --> 
</dependency> 
+1

Non funziona. – Marcin

0

recente ho sperimentato che questo comportamento è innescato dalla versione indicata nei file pom.xml. Se la versione della lib di cui il tuo progetto principale dipende è disponibile per eclissi nello spazio di lavoro (ad es. Un progetto con il pom.xml [gruppo, artefatto, versione] corrispondente per la lib) questo sarà usato come riferimento di progetto al suo posto di essere estratto dalla posizione M2REPO.

La mia soluzione era di cambiare la versione della libreria pom.xml nello spazio di lavoro in un'altra versione che mi permetteva di migliorare la lib, mentre il progetto principale ancora tirava la vecchia lib da M2REPO.

L'utilizzo di questo allineando i numeri di versione consente di eseguire miglioramenti/alterazioni di artefatti concomitanti con problemi minori.

Non ho ancora testato se è necessario eseguire il mvn eclipse:eclipse ogni volta che si modificano i file lib pom.xml e le dipendenze pom.xml primarie, ma mi aspetto che sia così.

9

Devo evitare di includere la dipendenza come progetto di rifrazione, ma come un vaso. Utilizzo di Eclipse 4.6 Neon nessuna delle soluzioni precedenti funziona.

ho avuto disattivare la funzione di Workspace Resolution

click on the project -> Maven -> Disable Workspace Resolution 
+0

Grazie! Ho salvato la mia giornata! –

+0

Grazie! Ha funzionato per me. –

0

ho cercato di chiudere il progetto in Eclipse & di lavoro solo per sé costruita, questa volta prendendo il barattolo dal repository invece di collegare il progetto

Problemi correlati