Come aggiungere file jar locali a un progetto Maven?

Come faccio ad aggiungere file jar locali (non ancora parte del repository Maven) direttamente nelle sorgenti di libreria del mio progetto?

Installa il JAR nel tuo repository Maven locale come segue:

 mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=true 

Dove ognuno si riferisce a:

: il percorso del file per caricare ad es. -> c: \ kaptcha-2.3.jar

: il gruppo in cui il file deve essere registrato sotto eg -> com.google.code

: il nome della risorsa per il file es. -> kaptcha

: la versione del file es. -> 2.3

: la confezione del file es. -> jar

Riferimento

È ansible aggiungere direttamente dipendenze locali (come menzionato nel progetto build maven con le librerie proprietery incluse ) in questo modo:

  com.sample sample 1.0 system ${project.basedir}/src/main/resources/yourJar.jar  

Per prima cosa vorrei dare credito a questa risposta ad un utente anonimo di stackoverflow – Sono abbastanza sicuro di aver visto una risposta simile qui prima – ma ora non riesco a trovarlo.

La migliore opzione per avere i file jar locali come dipendenza è creare un repository maven locale. Tale repository non è altro che una struttura di directory adeguata con i file pom in esso.

Nel mio esempio: ho un master project su ${master_project} location e subroject1 è su ${master_project}/${subproject1}

quindi sto creando il repository mvn in: ${master_project}/local-maven-repo

Nel file pom nel sottoprogetto1 che si trova il repository ${master_project}/${subproject1}/pom.xml deve essere specificato il percorso del file come parametro url:

   local-maven-repo file:///${project.parent.basedir}/local-maven-repo   

La dipendenza può essere specificata come per qualsiasi altro repository. Ciò rende il tuo repository indipendente. Ad esempio, una volta che il jar desiderato è disponibile in Maven Central, è sufficiente cancellarlo dal repository locale e verrà estratto dal repository predefinito.

   org.apache.felix org.apache.felix.servicebinder 0.9.0-SNAPSHOT  

L’ultima, ma non meno importante cosa da fare è aggiungere il file jar al repository locale usando l’opzione -DlocalRepositoryPath come qui:

 mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \ -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \ -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \ -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \ -DlocalRepositoryPath=${master_project}/local-maven-repo 

Il file jar di onece è installato in modo tale che il repository mvn possa essere impegnato nel repository del codice e l’intera configurazione sia indipendente dal sistema. ( esempio di lavoro in github )

Sono d’accordo sul fatto che il fatto di avere dei JAR dedicati al repo del codice sorgente non è una buona pratica, ma nella vita reale una soluzione rapida e sporca a volte è meglio di un repository nexus completo per ospitare un jar che non è ansible pubblicare.

Crea una nuova cartella, diciamo local-maven-repo alla radice del tuo progetto Maven.

Basta aggiungere un repository locale all’interno del tuo del tuo pom.xml :

   local-maven-repo file:///${project.basedir}/local-maven-repo   

Quindi per ogni jar esterno che desideri installare, vai alla radice del tuo progetto ed esegui:

 mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH] 
  group id name artifact name version number system jar location  

Mi piacerebbe una soluzione del genere – usa maven-install-plugin nel file pom:

   org.apache.maven.plugins maven-install-plugin 2.5.2   initialize  install-file   lib/yourJar.jar com.somegroup.id artefact-id xyz jar     

In questo caso è ansible eseguire mvn initialize e jar verrà installato nel repository Maven locale. Ora questo jar è disponibile durante qualsiasi passaggio di routine su questa macchina (non dimenticare di includere questa dipendenza come qualsiasi altra dipendenza di maven in pom con ). È anche ansible associare l’installazione di jar a non initialize passaggio, ma a qualsiasi altro passaggio che ti piace.

Sì, puoi averlo ma non è una buona idea.

Invece installa tutti questi vasi su repository Maven

Vedi anche

  • Come creare un progetto Maven con le librerie appropriate incluse

Un modo è di caricarlo sul tuo gestore di repository Maven (come Nexus). È buona prassi avere comunque un proprio gestore di repository.

Un altro buon modo che ho visto di recente è includere il plug-in di installazione di Maven nel ciclo di vita della build: dichiari in POM di installare i file nel repository locale. È un piccolo ma piccolo overhead e nessun passaggio manuale è coinvolto.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

Aggiungi il tuo JAR locale nel file POM e usalo nella generazione di Maven.

 mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar 

Per esempio:

 mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar 

Quindi aggiungilo al POM in questo modo:

inserisci la descrizione dell'immagine qui

Ovviamente puoi aggiungere vasi a quella cartella. Ma forse non è quello che vuoi ottenere …

Se hai bisogno di questi jar per la compilazione, controlla questa domanda correlata: Posso aggiungere i jar a maven 2 build classpath senza installarli?

Inoltre, prima che qualcuno lo suggerisca, NON utilizzare l’ambito del sistema.

riga di comando :

 mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar 

Il modo preferito sarebbe creare il tuo repository remoto.

Vedi qui per i dettagli su come farlo. Dai un’occhiata alla sezione ” Caricamento in un repository remoto “.

Un altro caso interessante è quando si desidera avere nel proprio progetto i propri vasi di creatività. Potresti voler mantenere le capacità di Maven per risolvere le dipendenze transitive. La soluzione è abbastanza facile.

  1. Crea una cartella libs nel tuo progetto
  2. Aggiungi le seguenti righe nel tuo file pom.xml

     ${pom.basedir}/libs/    local-maven-repository file://${local.repository.folder}  true   true    
  3. Aprire la cartella .m2 / repository e copiare la struttura della directory del progetto che si desidera importare nella cartella libs .

Ad esempio, si supponga di voler importare la dipendenza

  com.mycompany.myproject myproject 1.2.3  

Basta andare su .m2 / repository e vedrai la seguente cartella

com / mycompany / progetto / 1.2.3

Copia tutto nella cartella libs (di nuovo, comprese le cartelle sotto .m2 / repository ) e il gioco è fatto.

Voglio condividere un codice in cui è ansible caricare una cartella piena di vasi. È utile quando un provider non ha un repository pubblico ed è necessario aggiungere molte librerie manualmente. Ho deciso di creare un .bat invece di chiamare direttamente a Maven perché potrebbe essere un errore di memoria insufficiente. È stato preparato per un ambiente Windows, ma è facile adattarlo al sistema operativo Linux:

 import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; public class CreateMavenRepoApp { private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars"; public static void main(String[] args) throws IOException { File directory = new File(); //get all the files from a directory PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8"); writer.println("rem "+ new Date()); File[] fList = directory.listFiles(); for (File file : fList){ if (file.isFile()){ String absolutePath = file.getAbsolutePath() ; Manifest m = new JarFile(absolutePath).getManifest(); Attributes attributes = m.getMainAttributes(); String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) { String[] parts =symbolicName.split("\\."); String artifactId = parts[parts.length-1]; String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1); String version = attributes.getValue("Bundle-Version"); String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar "; writer.println(mavenLine); } } } writer.close(); } } 

Dopo aver eseguito questo main da qualsiasi IDE, eseguire update_repo_maven.bat.

Dai anche un’occhiata a …

 compile 

Dipendenze Maven . Questa è l’impostazione predefinita, ma in alcuni casi ho trovato esplicitamente l’impostazione di tale ambito anche in Maven per trovare le librerie locali nel repository locale.

Questa è una syntax breve per le versioni più recenti:

 mvn install:install-file -Dfile= 

Funziona quando il JAR è stato costruito da Apache Maven – il caso più comune. Quindi conterrà un pom.xml in una sottocartella della directory META-INF, che verrà letto di default.

Fonte: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

Nota che NON è necessariamente una buona idea usare un repo locale. Se questo progetto è condiviso con altri, tutti gli altri avranno problemi e domande quando non funziona, e il jar non sarà disponibile nemmeno nel tuo sistema di controllo sorgente!

Anche se il repository condiviso è la migliore risposta, se non puoi farlo per qualche motivo, allora l’incorporamento del barattolo è meglio di un repository locale. I contenuti pronti contro termine locali possono causare molti problemi, soprattutto nel tempo.

Sul tuo repository locale puoi installare il tuo jar emettendo i comandi

  mvn install:install-file -Dfile= -DgroupId= \ -DartifactId= -Dversion= -Dpackaging= 

Segui questo link utile per fare lo stesso dal sito web di mkyoung. Puoi anche controllare la guida di esperti per lo stesso

Per qualche ragione, nell’applicazione web a cui sto dando manutenzione, né la soluzione di Alireza Fattahi né la soluzione di JJ Roman funzionavano correttamente. In entrambi i casi, la compilazione va bene (vede il barattolo), ma la confezione non riesce a includere il barattolo all’interno della guerra.

L’unico modo in cui sono riuscito a farlo funzionare è stato mettere il jar su /src/main/webapp/WEB-INF/lib/ e quindi combinarlo con la soluzione di Fattahis o di Roman.

Il modo veramente veloce e sporco è quello di puntare a un file locale:

  sample com.sample 1.0 system C:\DEV\myfunnylib\yourJar.jar  

Tuttavia questo vivrà solo sulla tua macchina (ovviamente), per la condivisione di solito ha senso usare un vero archivio m2 (nexus / artifactory) o se non ne hai uno o non vuoi crearne uno su un maven locale archivio strutturato e configurare un “repository” nel tuo pom: locale:

   my-local-repo file://C:/DEV//mymvnrepo   

a distanza:

   my-remote-repo http://192.168.0.1/whatever/mavenserver/youwant/repo   

QUESTA RISPOSTA È SOLO PER GLI UTENTI DI ECLIPSE:

Se si utilizza Eclipse, posizionare il contenitore in lib /, fare clic con il pulsante destro del mouse sul nome del contenitore e fare clic su “aggiungi al percorso di creazione”. Eclipse creerà una “libreria di riferimento” e posizionerà il barattolo per te

Ha risolto l’importazione del jar subito nel programma per me

Per installare jar di terze parti, si prega di chiamare il comando come di seguito

 mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path 

Ho avuto lo stesso errore per un insieme di dipendenze nel mio pom.xml, le versioni delle dipendenze non sono state specificate nel pom.xml e sono state citate nel repository principale. Per qualche ragione, i dettagli della versione non erano sincronizzati con questo repository. Quindi ho inserito manualmente le versioni utilizzando il tag e ha funzionato come un fascino. Un po ‘di tempo necessario per cercare le versioni nel genitore e specificare qui. Ma questo può essere fatto solo per i vasi che mostrano l’errore artefatto e funziona. Spero che questo aiuti qualcuno.

Penso che una soluzione migliore per questo problema sia usare maven-install-plugin per installare automaticamente i file al momento dell’installazione. È così che l’ho impostato per il mio progetto.

Innanzitutto, aggiungi il percorso (dove memorizzi i file .jar locali) come una proprietà.

  /path/to/jar  

Quindi, sotto i plugins aggiungi un plugin per installare i jar durante la compilazione.

  org.apache.maven.plugins maven-install-plugin 2.5.2   1 initialize  install-file   com.local.jar appengine-api 1.0 jar ${local.sdk}/lib/impl/appengine-api.jar    appengine-api-stubs initialize  install-file   com.local.jar appengine-api-stubs 1.0 jar ${local.sdk}/lib/impl/appengine-api-stubs.jar     

Infine, nelle dipendenze, è ansible aggiungere i vasi

  com.local.jar appengine-api 1.0   com.local.jar appengine-api-stubs 1.0 test  

Impostando il tuo progetto in questo modo, il progetto continuerà a essere costruito anche quando lo local.sdk su un altro computer (dato che ha tutti i file jar nel percorso specificato dalla proprietà local.sdk ).

Per groupId utilizzare un nome univoco solo per assicurarsi che non ci siano conflitti.

Ora, quando mvn install o mvn test i jar locali verranno aggiunti automaticamente.

  1. installare mvn

Puoi scrivere il codice qui sotto nella riga di comando o se stai usando Eclipse incorporato fai clic con il tasto destro del mouse su progetto -> Esegui come -> Esegui configurazioni … -> nel pannello sinistro fai clic destro su Maven Build -> nuova configurazione -> scrivi il codice in Obiettivi e nella directory di base: $ {project_loc: NameOfYourProject} -> Esegui

 mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=true 

Dove ognuno si riferisce a:

: il percorso del file per caricare ad es. -> c: \ kaptcha-2.3.jar

: il gruppo in cui il file deve essere registrato sotto eg -> com.google.code

: il nome della risorsa per il file es. -> kaptcha

: la versione del file es. -> 2.3

: la confezione del file es. -> jar

2. Dopo l’installazione, dichiara jar in pom.xml.

   com.google.code kaptcha 2.3  

Ho avuto lo stesso problema con ojdbc6. Ho visto questo link ma, non funzionava. Il comando era corretto ma avevo bisogno di un parametro in più,

Questo è il link: http://roufid.com/3-ways-to-add-local-jar-to-maven-project/

Ecco l’esempio:

 install:install-file -Dfile=C:\driversDB\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar