martedì 15 maggio 2012

Esportare le dipendenze di un progetto maven

Per il build dei progetti Java, in particolare per progetti open source con un'ampia comunità di sviluppatori, ci si ritrova spesso a lavorare con il tool Maven.

Maven è un tool di build che utilizza file XML (pom.xml) per la descrizione sia dei passi richiesti per le diverse fasi di build, sia della struttura del progetto in termini di moduli e relative dipendenze (anche verso componenti esterni).

Così un progetto che dipenda, ad esempio, dalla libreria Hibernate, può semplicemente dichiarare tale dipendenza e Maven provvederà in fase di build a recuperare (eventualmente da Internet) il jar di Hibernate e tutte le librerie richieste da Hibernate stesso (effettuando il download quindi di tutte le librerie che costituiscono la chiusura transitiva del grafo delle dipendenze del progetto). Le librerie scaricate da Internet, sono memorizzate in una cache locale dell'utente in modo da essere utilizzate nelle successive fasi di build.

In alcuni casi (ad esempio per importare il progetto in un tool che non supporta Maven) è utile ottenere tutte le librerie necessarie per la build del progetto. Poichè Maven è basato su un sistema a plugin, ed è disponibile uno specifico plugin che effettua proprio questo compito, per ottenere il risultato desiderato è sufficiente una piccola modifica al file pom..xml del progetto.

Nella sezione project/build/plugins si può aggiungere il seguente plug-in di Maven:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
      <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>copy-dependencies</goal>
        </goals>
        <configuration>
         <outputDirectory>${project.build.directory}/depLibs</outputDirectory>
         <overWriteReleases>false</overWriteReleases>
         <overWriteSnapshots>true</overWriteSnapshots>
         <excludeTransitive>true</excludeTransitive>
       </configuration>
     </execution>
    </executions>
  </plugin>


La configurazione del plugin descritta sopra è tale eseguire la copia delle librerie durante la fase di pacakge. In questo modo, durante l'esecuzione del comando mvn package oltre al build, Maven provvederà a esportare tutte le librerie da cui il progetto dipende (direttamente e non) nella cartella depList (posizionata nello stesso folder in cui sono prodotti gli artefatti derivanti dal processo di build).

Nessun commento:

Posta un commento