2012-11-13 15 views
7

Ho una dipendenzaMaven: aggiungere le dipendenze locali per vaso

<dependency> 
     <groupId>de.matthiasmann</groupId> 
     <artifactId>twl</artifactId> 
     <version>1.0.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/TWL.jar</systemPath> 
    </dependency> 

Poi eseguo mvn assembly:assembly. Sono stati aggiunti tutti i file nativi e le librerie remote maven, ma non esiste questo jar.

UPDATE

Quando sto cercando di eseguire app java -jar myjar.jar. Restituisce un errore che non esiste una classe dalla dipendenza sopra (NoClassDefFoundError: de.matthiasmann.twl.ForExample). Voglio aggiungere classi da questo jar a myjar.jar (lo stesso che fa Maven con le dipendenze remote). Come posso configurare Maven per farlo?

+0

prega di elaborare –

+0

Guardate la risposta da @BlessedGeek e anche su questo rilevante SO domanda: http://stackoverflow.com/questions/2229757/maven-add-a-a-a-jar-per-percorso relativo/2230464 # 2230464 – maba

+0

Fare riferimento a questo https://stackoverflow.com/a/45120371/1709793 – craftsmannadeem

risposta

7

Non è possibile utilizzare systemPath, a meno che il proprio server/contenitore Java EE non abbia configurato il jar.

Ricorda che il maven è solo lo sviluppo e il tempo di compilazione. Una volta creato il file war, Maven non ha alcun effetto se non per aver inserito tutti i jar desiderati nella cartella WEB-INF/lib.

Quando si specifica l'ambito del sistema, significa che è responsabilità dell'utente assicurarsi che il barattolo sia presente quando viene dispiegata la guerra. Hai già un framework per farlo e non vuoi ingombrare la tua dipendenza da build con quel jar, ma devi renderlo disponibile tramite Maven solo durante lo sviluppo.

L'altro ambito simile è "fornito". ad es., JBoss o la tua implementazione comune La struttura di Tomcat fornisce già molti jar come Spring e Hibernate caricati dall'avvio del server e comuni a tutte le app nel server. Pertanto, non vorresti che maven build includesse quelli nel file war.

Nel modo giusto, i guru di Maven ti direbbero. è quello di avere il proprio server Maven e costruire qualsiasi artefatto necessario in quel server. Tuttavia, occasionalmente ciò non è possibile.

Pertanto, in tali occasioni, creo un repository a livello di progetto che viene distribuito con il progetto e controllato nel controllo di versione. Eseguo il comando mvn install per creare una directory a livello di progetto chiamata, ad esempio, "project-repo".

http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html (A causa della familiarità, la maggior parte delle volte, costruisco il repository manualmente anziché eseguire mvn install).

Quindi in POM, ho specificato il file: // $ {project.basedir}/project-repo come uno dei repository. L'avvertenza con questo è che in Windows, le barre diverse dalla coppia dopo "file: //" devono essere back-slash quando si fa riferimento ai percorsi del file system di Windows.

<repositories> 
    <repository> 
     <id>my-repo1</id> 
     <name>my custom repo</name> 
     <url>http://ho.ho.ho</url> 
    </repository> 
    <repository> 
     <id>project-repo</id> 
     <name>my project repo</name> 
     <url>file://${project.basedir}\project-repo</url> 
    </repository> 
    </repositories> 
+1

Non c'è alcun problema con la barra diretta '/'nel file url su windows. Funziona alla grande. +1 BTW. – maba

0

Se si dispone di una tale dipendenza la soluzione migliore è primo ad utilizzare un repository manager e in poche parole che la dipendenza nel repository manager e poi usarlo come semplice dipendenza.

Problemi correlati