Maven: il modo migliore per colbind un JAR esterno personalizzato al mio progetto?

È il mio primo paio di giorni che sto imparando Maven e sto ancora lottando con le basi. Ho un file .jar esterno (non disponibile nei repository pubblici) di cui ho bisogno per fare riferimento nel mio progetto e sto cercando di capire quale sia la mia migliore opzione.

È un progetto su piccola scala senza un repository centrale per le librerie, quindi deve essere un repository locale (in qualche modo aggiunto al controllo del codice sorgente, non so se dovrebbe funzionare in quel modo?) O il .jar deve essere archiviato disco al di fuori di qualsiasi repository formale.

1) Qual è la mia migliore opzione per aggiungere il file .jar ai riferimenti del mio progetto con Maven dato che voglio che sia il progetto che la libreria siano nel controllo del codice sorgente?

2) Non riesco ancora a vedere Eclipse vedere la dipendenza. L’ho aggiunto manualmente alla sezione del pom, e si mostra bene nell’elenco delle dipendenze in m2eclipse. mvn compile e mvn hanno entrambi successo, ma l’esecuzione del programma si traduce in:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: LibraryStuff cannot be resolved to a type 

Questo è dopo aver modificato il POM come:

  stuff library 1.0 ${lib.location}/MyLibrary.jar system  

Dovrei eseguire l’installazione di mvn: install-file ha anche pensato che ho già modificato pom.xml come sopra?

Grazie!

Penso che dovresti usare mvn install:install-file per popolare il tuo repository locale con i jars della libreria, quindi dovresti cambiare l’ambito dal sistema alla compilazione.

Se stai iniziando con Maven, ti suggerisco di usare Maven direttamente non plugin IDE in quanto aggiunge un ulteriore livello di complessità.

Per quanto riguarda l’errore, metti i jar necessari sul classpath? Se si utilizzano i tipi dalla libreria, è necessario averne accesso anche in runtime. Questo non ha nulla a che fare con lo stesso Maven.

Non capisco perché vuoi mettere la libreria al controllo del codice sorgente – è per i codici sorgente non binari binari.

È ansible creare un repository di progetto, quindi non è necessario run mvn install:install-file ogni volta che si lavora su un nuovo computer

  in-project In Project Repo file://${project.basedir}/libs   dropbox dropbox-sdk 1.3.1  

/groupId/artifactId/version/artifactId-verion.jar

dettaglio leggi questo post sul blog

http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/

Il manuale di Maven dice di fare questo:

 mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar 

aggiornamento Da allora abbiamo appena installato il nostro server Nexus, molto più semplice e pulito.

Nella nostra azienda avevamo alcuni barattoli con alcuni vasi comuni ma che non erano ospitati in nessun repository di Maven, né volevamo averli nell’archivio locale. Abbiamo creato un semplice repository mvn (pubblico) su Github (ma è ansible ospitarlo su qualsiasi server o localmente):
si noti che questo è l’ideale solo per la gestione di alcuni file jar raramente chaning

  1. Crea pronti contro termine su GitHub:
    https://github.com//mvn-repo/

  2. Aggiungi repository in pom.xml
    (Prendi nota che il file raw completo del percorso sarà leggermente diverso dal nome del repository)

      project-common Project Common https://github.com//mvn-repo/raw/master/  
  3. Aggiungi dipendenza all’host (Github o server privato)
    un. Tutto quello che devi sapere è che i file sono memorizzati nel pattern indicato da @glitch
    /groupId/artifactId/version/artifactId-version.jar
    b. Sul tuo host crea le cartelle per abbinare questo modello.
    Ad esempio, se si dispone di un file jar denominato service-sdk-0.0.1.jar , creare la cartella service-sdk/service-sdk/0.0.1/ e inserire il file jar service-sdk-0.0.1.jar in esso.
    c. Provalo provando a scaricare il jar da un browser (nel nostro caso: https://github.com//mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Aggiungi dipendenza al tuo file pom.xml:

      service-sdk service-sdk 0.0.1  
  5. Godere

Questo può essere facilmente ottenuto usando l’elemento elemento annidato all’interno di .

Per esempio:

    ldapjdk ldapjdk system 1.0 ${basedir}\src\lib\ldapjdk.jar   

Riferimento: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

Non usare systemPath. Contrariamente a ciò che le persone hanno detto qui, puoi mettere un jar esterno in una cartella sotto la directory del progetto estratto e Maven può trovarlo come altre dipendenze. Ecco due passaggi cruciali:

  1. Utilizzare “mvn install: install-file” con -DlocalRepositoryPath.
  2. Configura un repository in modo che punti a quel percorso nel tuo POM.

È abbastanza semplice e puoi trovare un esempio passo-passo qui: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

Cambia il tuo SystemPath .

  stuff library 1.0 ${project.basedir}/MyLibrary.jar system  

Modo Maven per aggiungere i vasi non di Maven al progetto Maven

Progetto Maven e vasi non esperti

Aggiungi i plugin di installazione di Maven nella sezione di compilazione

  org.apache.maven.plugins maven-install-plugin ${version.maven-install-plugin}   install-external-non-maven1-jar clean  default jar1.group non-maven1 ${version.non-maven1} ${project.basedir}/libs/non-maven1.jar jar true   install-file    install-external-non-maven2-jar clean  default jar2.group non-maven2 ${version.non-maven2} ${project.basedir}/libs/non-maven2.jar jar true   install-file    install-external-non-maven3-jar clean  default jar3.group non-maven3 ${version.non-maven3} ${project.basedir}/libs/non-maven3.jar jar true   install-file     

Aggiungi la dipendenza

   jar1.group non-maven1 ${version.non-maven1}   jar2.group non-maven2 ${version.non-maven2}   jar3.group non-maven3 ${version.non-maven3}   

Riferimenti Nota Sono il proprietario del blog

Il pom.xml esaminerà il tuo repository locale per cercare di trovare la dipendenza che corrisponde al tuo artefatto. Inoltre, non dovresti utilizzare realmente l’ambito del sistema o gli attributi systemPath, questi sono normalmente riservati per cose che sono nel JDK e non nel JRE

Vedi questa domanda su come installare gli artefatti di Maven.

Se incontri lo stesso problema e usi la versione iniziale di avvio v1.4 + , puoi farlo in questo modo.

È disponibile un includeSystemScope che è ansible utilizzare per aggiungere dipendenze nell’ambito del campo di applicazione al jar.

per esempio

Sto usando il driver oracle nel mio progetto.

  com.oracle ojdbc14 10.2.0.3.0 system ${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar  

quindi make includeSystemScope = true per includere il jar nel percorso / BOOT-INF / lib / **

  org.springframework.boot spring-boot-maven-plugin  true   

ed escludere dalla risorsa per evitare l’inclusione duplicata, il barattolo è abbastanza grasso ~

  src/test/java   src/main/resources  **/*.jar     

In bocca al lupo!

La soluzione migliore qui è installare un repository: Nexus o Artifactory. Se ti dà un posto dove mettere cose come questa, e più avanti accelera le cose mettendo nella cache la tua roba dall’esterno.

Se la cosa con cui hai a che fare è open source, potresti anche prendere in considerazione la possibilità di inserire la parte centrale.

Vedi la guida .

Si noti che tutti gli esempi che usano

 ... 

richiede esterno

 ... 

allegando tag. Non è chiaro da alcuni degli esempi.

Se il jar esterno viene creato da un progetto Maven, solo allora puoi copiare l’intero progetto sul tuo sistema ed eseguire a

 mvn install 

nella directory del progetto. Questo aggiungerà il jar nella directory .m2, che è un repository locale di Maven.

Ora puoi aggiungere il

  copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project  

Questo ti garantirà

 mvn exec:java 

lavori. Se usi suggerito qui

 system 

Quindi dovrai aggiungere le classi individualmente mentre usi l’esecuzione attraverso la linea di comando.

È ansible aggiungere i barattoli esterni con il seguente comando descritto qui

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

Con Eclipse Oxygen puoi fare le seguenti cose:

  1. Posiziona le tue librerie in WEB-INF / lib
  2. Progetto -> Configura percorso build -> Aggiungi libreria -> Libreria app Web

Maven li prenderà quando installerà il progetto.