2016-08-11 3 views
1

Ich versuche eine Java-Anwendung maven zu migrieren. Es gibt einige Abhängigkeiten, die bisher als jar Dateien bereitgestellt wurden. Eine dieser Abhängigkeiten ist jung2, die aus der Maven-Repository verfügbar: mvnrepository.comMaven: Wie wird die Abhängigkeit vom Typ Pom importiert?

Ich brauche alle bereitgestellten Module und ich verstehe nicht, wie diese dependecy richtig in meinem pom.xml so erklären, dass alle entsprechenden jar Dateien heruntergeladen und Die Klassen sind zur Kompilierzeit verfügbar.

Dies ist, was meine pom.xml Datei wie jetzt aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>groupId</groupId> 
    <artifactId>myProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <dependencyManagement> 
     <dependencies> 
      <!-- https://mvnrepository.com/artifact/net.sf.jung/jung2 --> 
      <dependency> 
       <groupId>net.sf.jung</groupId> 
       <artifactId>jung2</artifactId> 
       <version>2.0.1</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
</project> 

Ich habe auch versucht <scope>import</scope> Weglassen und die Abhängigkeit in den dependencies Abschnitt setzen. Bei der Ausführung von mvn compile oder mvn package tritt eine Fehlermeldung auf, dass die entsprechenden Pakete nicht vorhanden sind.

Wenn ich zusätzlich eine dependency innerhalb dependencies aber außerhalb dependencyManagement, z.

<dependencies> 
    <dependency> 
    <groupId>net.sf.jung</groupId> 
    <artifactId>jung2</artifactId> 
</dependency> 

Ich erhalte eine Fehlermeldung über fehlende Version. Aber soweit ich das verstanden habe, sollte dies aufgrund dependencyManagement nicht notwendig sein? Wenn ich <version>2.0.1</version> auch hinzufügen, dann bekomme ich folgende Fehlermeldung:

Failure to find net.sf.jung:jung2:jar:2.0.1

+0

Dies ist in einem '' Abschnitt, so müssen Sie entweder eine '' außerhalb davon refencing es hinzuzufügen, oder nehmen Sie es aus dem Abhängigkeitsmanagement. Siehe http://stackoverflow.com/questions/2619598/differences-between-dependencymanagement-and-dependencies-in-maven?rq=1 – Tunaki

+0

@Tunaki Danke für Ihre Antwort, ich habe meinen ursprünglichen Beitrag bearbeitet. Das Hinzufügen der Abhängigkeit außerhalb des 'dependencyManagers' hat bisher nicht funktioniert. – yogii

+0

Ja, Sie müssen den Typ hinzufügen (und vielleicht den Umfang, ich bin mir nicht sicher). – Tunaki

Antwort

1

Der „dependencyManagement“ Tag wird in der Regel verwendet, wenn Sie ein Multi-Modul-Projekt in maven haben (wo Sie Eltern-Kind-Beziehung) .

Wenn Sie Abhängigkeiten innerhalb des Tags "dependencyManagement" angeben, werden die Abhängigkeiten NOT tatsächlich heruntergeladen. Wenn Sie die Abhängigkeit innerhalb dieses Tags angeben, bedeutet dies, dass diese Abhängigkeit für das untergeordnete Pom verfügbar ist (zum Herunterladen). Das untergeordnete Pom muss explizit die groupId und die artifactId zum Herunterladen bereitstellen und das jar zum Kompilieren seiner Klassen verwenden.

Wenn Sie nur ein einziges Modul Projekt haben (sieht aus wie Ihr ein einzelne Modul Projekt ist), dann können Sie dieses Problem beheben, indem Sie den Tag nicht verwenden. Setzen Sie einfach Ihre Gläser in das Etikett.

Für Ex:

<dependencies> 
    <dependency> 
     <groupId>com.abc</groupId> 
     <artifactId>def</artifactId> 
     <version>1.0.0</version> 
     <type>pom</type>  // This will now download the pom and its associated transitive dependent jars 
    </dependency> 
    <dependency> 
     <groupId>com.pqr</groupId> 
     <artifactId>xyz</artifactId> 
     <version>1.0.0</version> 
     <type>pom</type> // This will now download the pom and its associated transitive dependent jars 
    </dependency> 
</dependencies> 

Wie ich schon sagte, das dependenciesManagement Tag wird meist sinnvoll zu verwenden, wenn Sie ein Multi-Modul-Projekt haben, das nicht der Fall ist.

Verwandte Themen