2010-12-31 3 views
13

Wir verwenden ANT für unseren Build-Prozess und haben nicht vor, dies in naher Zukunft zu ändern.Verwenden Sie Maven nur, um einige Bibliotheksgläser zu holen

Ist es möglich, Maven zu verwenden nur holen gemeinsame Open-Source-JAR-Dateien (zB Log4J, SWT, JFace) und sie in der richtigen Position unseres Projekts setzen, also müssen wir sie nicht speichern in unserem Versionskontrolle — vorzuziehen, ohne den typischen Maven-Cache im Home-Verzeichnis zu erstellen?

Antwort

17

NEIN NEIN NEIN Jeder!

Wenn Sie Ant verwenden, ist die beste Möglichkeit, Maven-Repositorys zum Herunterladen von JAR-Abhängigkeiten zu verwenden, die Verwendung von Ivy mit Ant. Genau dafür ist Ivy da.

Die Installation von Ivy und die Arbeit mit aktuellen Ant-Projekten ist einfach. Es funktioniert mit Nexus und Artifactory, wenn Sie diese als Ihre lokalen Maven-Repositories verwenden.

Werfen Sie einen Blick auf Ivy. Es ist wahrscheinlich genau das, was du willst.

+0

Oder maven ant Aufgaben. Entweder verwendet es zum Herunterladen von Artefakten aus einem Repository. http://maven.apache.org/ant-tasks/index.html – michael

+0

Verwenden Sie keine Maven-Ant-Aufgaben, es ist ein sehr altes Projekt, das veraltet sein sollte, es ist eine grundlegende Lösung, aber alles darüber hinaus wird wahrscheinlich zu kurz kommen – sloven

4

In Variation von org.life.java's answer würde ich nicht tun mvn install.

Stattdessen in der pom.xml würde ich folgendes Bit hinzufügen:

<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> 

Jetzt müssen Sie nur mvn generate-sources tun, die viel schneller als die volle mvn install ist, und alle Abhängigkeiten werden kopiert das angegebene Verzeichnis


Oh btw, ist nicht das, was Apache Ivy geht? Ant erweitern, um Mavens Abhängigkeitsmanagement zu verstehen?

+0

+1 für Apache Ivy – Goibniu

+0

ich nicht über Apache Ivy wissen auch nicht. Ist es möglich, bestimmte Bibliotheken hier und andere dort zu kopieren? – Mot

+1

@mklhmnn Ich habe Ivy nie ausprobiert. Ich bin ein Maven-Benutzer, der manchmal Ameisen benutzt, nicht umgekehrt, also wäre ich nicht die Zielgruppe für Ivy.Aber hier ist ein Zitat aus der Feature-Seite: 'Apache Ivy kann daher verwendet werden, um die Abhängigkeitsverwaltung von Apache Maven ™ in Apache Ant-Builddateien für diejenigen von Ihnen zu bringen, die bereits Apache Ant verwenden und keinen Apache einrichten möchten Maven-Projekt. Aber Apache Ivy hört nicht auf, es bietet viele weitere tolle Funktionen! http://ant.apache.org/ivy/features.html –

4

Es ist möglich, Sie sollten maven-ant-tasks verwenden.

Insbesondere seine dependencies ant Aufgabe. Mit diesem Setup ist keine Installation von Maven erforderlich.

<?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> 

Die einzige binäre Sie in Ihr Projekt überprüfen sollten, ist maven-ant-tasks.jar.

Eigentlich in unserem Projekt habe ich Sonatype Nexus (documentation) Maven Repository-Manager verwendet, um den Zugriff auf verschiedene Repositories zu zentralisieren und sogar einige Binärdateien zu verwalten, die für unsere Umgebung einzigartig sind. Mit Hilfe von Nexus hole ich einfach maven-ant-tasks.jar mit Ant <get> Aufgabe von einer bekannten URL. Sie müssen Nexus nicht verwenden, aber es beschleunigt erheblich die Erstellung, da es Binärdateien in der Nähe der Maschinen Ihres Entwicklers zwischenspeichert.

2

Ivy genau dies tut, wenn es Schopf aus dem Sumpf selbst:
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>