2010-12-31 15 views
13

Stiamo usando ANT per il nostro processo di compilazione e non abbiamo intenzione di cambiarlo nel prossimo futuro.Utilizzare Maven solo per recuperare alcuni vasi di libreria

E 'possibile usare Maven per solo prendere file comuni jar Open Source (ad esempio Log4J, SWT, JFace) e metterli nella giusta posizione del nostro progetto, in modo che non c'è bisogno di memorizzarle nel nostro è preferibile il controllo versione — senza creare la tipica cache Maven nella home directory?

risposta

17

NO NO NO Tutti!

Se si utilizza Ant, il modo migliore per utilizzare i repository Maven per scaricare le dipendenze jar è utilizzare Ivy con Ant. Questo è esattamente ciò che Ivy è per.

Installare Ivy e iniziare a lavorare con gli attuali progetti Ant è semplice. Funziona con Nexus e Artifactory se li usi come repository Maven locali.

Dai uno sguardo allo Ivy. Probabilmente è esattamente quello che vuoi.

+0

o attività di formica. Utilizza la formica per scaricare gli artefatti da un repository. http://maven.apache.org/ant-tasks/index.html – michael

+0

Non usare maven-ant-tasks è un progetto molto vecchio che dovrebbe essere deprecato, fa la risoluzione di base, ma qualsiasi cosa al di là – sloven

4

Nella variazione di org.life.java's answer, non lo farei mvn install.

Invece, nel pom.xml vorrei aggiungere la seguente bit:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
<outputDirectory>${project.build.directory}/lib</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Ora non vi resta che fare mvn generate-sources, che è molto più veloce rispetto al pieno mvn install, e tutte le dipendenze verranno copiati la directory specificata.


Oh btw, non è che quello Apache Ivy è di circa? Estendere Ant per capire la gestione delle dipendenze di Maven?

+0

+1 per Apache Ivy – Goibniu

+0

non so su Apache Ivy sia. È possibile copiare alcune librerie qui e altre lì? – Mot

+1

@mklhmnn Non ho mai provato Ivy. Sono un utente esperto che a volte usa formica, non il contrario, quindi non sarei il pubblico di riferimento per Ivy.Ma ecco una citazione dalla pagina delle caratteristiche: 'Apache Ivy può quindi essere usato per portare la funzionalità di gestione delle dipendenze di Apache Maven ™ ai file di build di Apache Ant, per quelli di voi che già usano Apache Ant e che non vogliono configurare un Apache Progetto Maven. Ma Apache Ivy non si ferma qui, offre molte altre grandi funzionalità! ' http://ant.apache.org/ivy/features.html –

4

È possibile, è necessario utilizzare maven-ant-tasks.

In particolare il suo compito ant. dependencies. Con questa configurazione non è richiesta l'installazione di Maven.

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    name="download-dependency" 
    basedir="." 
    default="download-dependency" 
    xmlns:artifact="antlib:org.apache.maven.artifact.ant" 
> 
    <target name="download-dependency"> 

    ... define properties ... 

    <taskdef 
     resource="org/apache/maven/artifact/ant/antlib.xml" 
     uri="antlib:org.apache.maven.artifact.ant" 
    /> 

    <artifact:dependencies> 
     <localRepository path="${local-repo.dir}"/> 
     <remoteRepository id="central" url="${repository-uri}"/> 
     <dependency 
     groupId="${groupId}" 
     artifactId="${artifactId}" 
     version="${version}" 
     type="${type}" 
     classifier="${classifier}" 
     scope="runtime" 
     /> 
    </artifact:dependencies> 
    </target> 
</project> 

L'unico binario si dovrebbe verificare nel vostro progetto è maven-ant-tasks.jar.

In realtà nel nostro progetto ho usato Sonatype Nexus (documentation) Maven repository manager per centralizzare l'accesso al repository diversi e anche mantenere alcuni binari unici per il nostro ambiente. Con l'aiuto di Nexus, prendo semplicemente maven-ant-tasks.jar con l'attività <get> della formica da un URL conosciuto. Non devi usare Nexus, ma accelera notevolmente le build, perché memorizza nella cache i binari vicino alle macchine del tuo sviluppatore.

2

Ivy fa proprio questo, quando si bootstrap:
http://ant.apache.org/ivy/history/latest-milestone/samples/build.xml

<property name="ivy.install.version" value="2.0.0-beta1"/> 
<property name="ivy.jar.dir" value="lib"/> 
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/> 
<target name="resolve" unless="skip.download"> 
    <mkdir dir="${ivy.jar.dir}"/> 
    <echo message="installing ivy..."/> 
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/> 
</target> 
Problemi correlati