2010-02-01 15 views
27

Sto mavenizing alcuni progetti.Il modo migliore per creare un artefatto maven dal barattolo esistente

Questi progetti dipendono tutti da un numero di librerie, la maggior parte delle quali sono disponibili nel repository Maven. Per le altre librerie, mi piacerebbe creare un artefatto maven, quindi posso usarlo come dipendenza. Il problema è che ho solo i file jar di queste librerie.

Qual è il modo migliore per creare artefatti da file jar esistenti?

+0

possibile duplicato di [aggiungere una dipendenza a Maven] (http://stackoverflow.com/questions/396245/add-a-dependency-in-maven) –

risposta

2

È possibile utilizzare lo Maven Deploy Plugin per caricare il file JAR (e facoltativamente un file POM, anche se per impostazione predefinita verrà creato per il proprio) nel repository Maven.

1

Come danben said, è necessario distribuire questi jar in un repository. Tuttavia, sembra che dalla tua domanda sembri che non hai un repository tranne quello globale.

È possibile utilizzare Nexus o Artifactory.

26

Se non si utilizza un repositorya distanza (che è una situazione comune per lo sviluppo personale), semplicemente install questi manufatti nel repository localeutilizzando il install:install-file mojo:

mvn install:install-file 
    -Dfile=<path-to-file> 
    -DgroupId=<group-id> 
    -DartifactId=<artifact-id> 
    -Dversion=<version> 
    -Dpackaging=<packaging> 
    -DgeneratePom=true 

Where: <path-to-file> the path to the file to load 
     <group-id>  the group that the file should be registered under 
     <artifact-id> the artifact name for the file 
     <version>  the version of the file 
     <packaging>  the packaging of the file e.g. jar 

Ma ovviamente, questo renderà la tua build non portatile (questo potrebbe non essere un problema però). Per non sacrificare la portabilità, dovrai rendere le risorse disponibili in un repository remoto. In un contesto aziendale, il modo comune per gestirlo è installare un repository aziendale (e in tal caso, a deploy gli artefatti).

Aggiornamento: Una volta che il manufatto è installato nel repository locale, è sufficiente dichiarare un elemento <dependency> nel pom come per qualsiasi altra dipendenza, ad es .:

<dependency> 
    <groupId>aGroupId</groupId> 
    <artifactId>aArtifactId</artifactId> 
    <version>1.0.12a</version> 
    <packaging>jar</packaging> 
</dependency> 
+0

Stessa domanda di cui sopra, non installare -file risolve le dipendenze? O carica solo il file jar nel repository locale?In secondo luogo, come creeresti le voci di dipendenza nel tuo pom.xml? –

+0

@Nils No, install: install-file non risolverà le dipendenze. Come è potuto accadere? Maven non ha alcuna conoscenza di questi artefatti e delle loro dipendenze se non sono "mavenized". Quindi, in effetti, caricherà solo il file jar specificato. E aggiornerò la mia risposta per mostrarti come dichiarare la dipendenza nel tuo pom.xml. –

+0

Ok, questa era la mia ipotesi. Come descrive Manuel, affrontare le dipendenze transitive in modo manuale è doloroso. Quindi il mio pensiero (e ho pensato che questo riflettesse in qualche modo la domanda 3wh) era come affrontare le dipendenze quando si tratta di un vaso. Mi ricordo che uno dei miei ex colleghi aveva scritto degli script che guardavano in un barattolo, i suoi sorgenti/file di classe e la cartella lib, e con quelle informazioni cercava di creare un pom con le dipendenze migliori possibile. Ma a quanto pare, questa cosa non è mai stata creata nel repository dei plugin di Maven. O c'è qualcosa di simile? –

0

So che il vostro problema. A volte, i vasi di venerazione sono un dolore (specialmente se hanno ulteriori dipendenze transitive, che devono essere definite anche in pom.xml).

Hai controllato se queste librerie non esistano mai come maven deps? Dai un'occhiata ai soliti sospetti:

A volte mi piace usare finestra di upload vaso Nexus per far creare file pom.xml.

+0

Non guardare manualmente, usa un motore di ricerca: http://maven.apache.org/general.html#How_to_find_dependencies –

+0

hai ragione. questo è il primo passo da fare. ancora (anche se molto raro) a volte ho dovuto cercare manualmente, perché i motori di ricerca non riuscivano a trovare la dipendenza. –

1

È anche possibile creare dipendenze di "sistema" su jar che non si trovano in un repository nel progetto. Ad esempio,

<dependency> 
     <groupId>com.example</groupId> 
     <artifactId>MySpecialLib</artifactId> 
     <version>1.2</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath> 
    </dependency> 
Problemi correlati