Attualmente sono nel bel mezzo della conversione di un grande progetto multi-modulo (~ 100 sottomoduli) per utilizzare Maven. Attualmente usiamo Ant + Ivy.Gestione delle dipendenze native più intelligente con Maven
Finora non sono emersi problemi importanti e sono a mio agio che Maven è ancora una buona idea. Tuttavia, mi chiedo se esiste un modo migliore per gestire le dipendenze native.
Finora sono giunto alle seguenti conclusioni.
- È meglio installare ciascuna dipendenza nativa nel repository Maven come libreria autonoma o pacchetto archiviato contenente più dipendenze.
Piuttosto che perdersi nel dichiarare ogni dipendenza con il plugin di dipendenza Maven, ho optato per dare ad ogni un classificatore (ad esempio nativi-win32) e utilizzare il seguente nella POM genitore:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>copy</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <includeScope>runtime</includeScope> <includeClassifiers>natives-win32</includeClassifiers> <outputDirectory>${project.build.directory}/natives</outputDirectory> </configuration> </execution> </executions> </plugin>
Finora questa sembra essere una semplice soluzione a tutto tondo che non richiede troppi problemi per aggiungere nuove dipendenze native. Mi offre anche una soluzione a tutto tondo per la gestione dei nativi. L'unica cosa che devo fare è assicurarsi che la mia directory/native/sia definita su java.library.path.
Una cosa che mi dà fastidio (un po ') di questo approccio è che tutte le mie dipendenze native vengono copiate in ogni sottomodulo che esprime una dipendenza transitiva su di esse, mentre le mie librerie jar felici vengono aggiunte al classpath a cui si fa riferimento dove si siedono nel mio deposito locale (nessuna copia richiesta).
Non c'è modo di essere più intelligente su questo e di far riferimento ai miei nativi dalla loro posizione di repository (presumendo che non li abbia archiviati, cioè dll). Ciò farebbe risparmiare un mucchio di copie inutili.
Ci sono altri potenziali trucchi che dovrei preoccuparmi dell'approccio sopra riportato?
Come hai risolto via Ivy? Il modo in cui l'hai descritto? – khmarbaise
Sembra essere risolto abbastanza male con le nostre configurazioni Ivy. Innanzitutto, le configurazioni di debug/run per eclipse impostano le dipendenze di runtime facendo riferimento a ciascuna di esse in un repository condiviso che è una directory mappata su ogni macchina degli sviluppatori. Quando vengono implementati o testati, gli script delle formiche prendono il sopravvento e spostano le dipendenze secondo necessità. È un bel casino. – S73417H
Hmmm, mi piace la tua soluzione.Sembra che quello che vuoi veramente sia un ulteriore obiettivo del plugin delle dipendenze che imposta una proprietà come elenco di path delle dipendenze risolte. Quello sarebbe l'ultimo pezzo del puzzle. Dovrebbe essere facile, perché non prendere una coltellata in un patch? Suonami se riesci a scrivere una tale patch e darò un'occhiata a come applicarla. –