2016-11-25 2 views
0

Ich versuche, und konvertieren nicht-maven Java NetBeans-Projekt zu einem Maven-Projekt. Das bestehende Projekt umfasst 36 Bibliotheken.Konvertieren eines nicht-Maven-Projekts in maven

Was ich tat

  1. I ausgegeben, um die Bibliothek Ordnerinhalt in eine Datei und bekam die Liste aller Gläser.
  2. ich für das Glas in Maven Repo durchsucht und die spezifische Version als Abhängigkeit in pom hinzugefügt

Das Ergebnis

Das neue Maven Projekt nun einige neue Gläser hat, die die alten nicht tat Wahrscheinlich wurden sie hinzugefügt, weil sie die Abhängigkeiten der hinzugefügten waren.

Meine Fragen

  1. Wenn die zusätzlichen Gläser, die in der „Abhängigkeiten“ hinzugefügt werden durch die Gläser erforderlich sind, die ich hinzugefügt, wie war das alte Projekt läuft? , d.h. ohne diese Gläser enthalten?
  2. Einige der Gläser im alten Projekt waren meiner Meinung nach die Abhängigkeiten anderer Gläser. Das habe ich herausgefunden, als ich ein Glas hinzugefügt habe und es ein weiteres Glas hinzugefügt hat, das ich hinzufügen wollte. Also, wie finde ich heraus, welches Glas ist die Abhängigkeit von denen, so dass ich nicht explizit in meinem Pom angeben? oder so könnte ich sie in der Reihenfolge hinzufügen.

EDIT:

Dank @SubOptimal, konnte ich die Grafik überprüfen, aber hier ist das, was ich bekommen:

enter image description here

Auf der linken Seite ist das alte Projekt geöffnet mit alle Bibliotheken, auf der rechten Seite, ist das Diagramm des neu maven konvertierten Projekts geöffnet. Jetzt können Sie sehen, dass die Bibliothek die gleiche "axis2-kernel-1.6.1.jar" ist. Auf der linken Seite, das alte Projekt hat nicht die geronimo-ws-metadata_2.0_spec, die als eine Abhängigkeit der axis2-Bibliothek angezeigt wird.

Nun ist meine Frage die gleiche, wie war das alte Projekt funktioniert, ist dies eine optionale Abhängigkeit?

+0

Sie können es mit 'mvn Abhängigkeit erfahren. – SubOptimal

+0

@SubOptimal das alte Projekt ist nicht pom, es wird nicht akzeptieren, die MVN-Befehl – shabby

+0

Es war für das neue Maven-Projekt, um zu sehen, wo die Abhängigkeit kommt aus. Sind die Abhängigkeiten, die Sie der 'pom.xml' hinzufügen, die gleiche Version? Dies könnte der Grund sein, dass die Abhängigkeit für eine von Ihnen hinzugefügte Bibliothek angezeigt wird. – SubOptimal

Antwort

1

Die neuen Abhängigkeiten können aufgrund der unterschiedlichen Bibliotheksversion im alten Nicht-Maven-Projekt und im neuen Maven-Projekt vorhanden sein.

Angenommen, das nicht-Maven-Projekt hätte JUnit in Version 3.8 verwendet.

pom.xml

<?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>sub.optimal</groupId> 
    <artifactId>foo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 
</project> 

in diesem Beispiel würden Sie nur haben JUnit als Abhängigkeit

mvn dependency:tree 

Ausgang

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ suboptimal --- 
[INFO] com.example:suboptimal:jar:0.0.1-SNAPSHOT 
[INFO] \- junit:junit:jar:3.8:test 

Wenn Sie jetzt in der Maven-Projekt Version 4.12 (statt der bisherigen verwenden würde 3.8) Sie sehen folgende Abhängigkeiten (nach Änderung der Versionsnummer in pom.xml)

<groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
<version>4.12</version> 

Ausgang würde

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ suboptimal --- 
[INFO] com.example:suboptimal:jar:0.0.1-SNAPSHOT 
[INFO] \- junit:junit:jar:4.12:test 
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test 

Für die gezeigte Abhängigkeit sein junit:junit:jar:4.12:test die test bedeutet, dass es nicht zu einer Laufzeitabhängigkeit. Es müssen die bereitgestellten Tests ausgeführt werden.

In Netbeans Sie beide jetzt als Test Abhängigkeit

enter image description here

Es gibt einen anderen Weg, um die Abhängigkeiten direkt zu zeigen, in Netbeans sehen würde. Wenn Sie die pom.xml öffnen, klicken Sie auf Graph und erst zum ersten Mal, nachdem Sie es auf Show Graph öffnen.

show dependency graph

Sie einen Baum visuelle Abhängigkeit

dependency tree

bearbeiten erhalten: Sie haben noch nicht gesagt, was Ihr altes Projekt verwendet. Aber finden Sie ein Beispiel für die axis2 kernel unten.

Wenn Ihr neues Projekt folgende Abhängigkeit hinzufügen

<dependency> 
    <groupId>org.apache.axis2</groupId> 
    <artifactId>axis2-kernel</artifactId> 
    <version>1.6.1</version> 
</dependency> 

Auflistung der Abhängigkeiten mit mvn dependency:tree verrät compile time Abhängigkeiten folgende (benötigt auch für die Laufzeit, siehe Maven dependency scopes)

[INFO] \- org.apache.axis2:axis2-kernel:jar:1.6.1:compile 
[INFO] +- org.apache.ws.commons.axiom:axiom-api:jar:1.2.12:compile 
[INFO] | +- org.apache.geronimo.specs:geronimo-activation_1.1_spec:jar:1.0.2:compile 
[INFO] | +- org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compile 
[INFO] | +- jaxen:jaxen:jar:1.1.1:compile 
[INFO] | \- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile 
[INFO] +- org.apache.ws.commons.axiom:axiom-impl:jar:1.2.12:compile 
[INFO] | \- org.codehaus.woodstox:wstx-asl:jar:3.2.9:compile 
[INFO] +- org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:jar:1.1.2:compile 
[INFO] +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1:compile 
[INFO] +- javax.servlet:servlet-api:jar:2.3:compile 
[INFO] +- commons-httpclient:commons-httpclient:jar:3.1:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.2:compile 
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2:compile 
[INFO] +- wsdl4j:wsdl4j:jar:1.6.2:compile 
[INFO] +- org.apache.ws.commons.schema:XmlSchema:jar:1.4.7:compile 
[INFO] +- org.apache.neethi:neethi:jar:3.0.1:compile 
[INFO] +- org.apache.woden:woden-api:jar:1.0M9:compile 
[INFO] +- org.apache.woden:woden-impl-dom:jar:1.0M9:compile 
[INFO] | \- org.apache.woden:woden-impl-commons:jar:1.0M9:compile 
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] \- javax.ws.rs:jsr311-api:jar:1.0:compile 

Warum es Ihr schaut jetzt Altes Projekt brauchte sie nicht? Angenommen, Ihr altes Projekt verwendet die Datei axis2.war (extrahiert aus axis2-1.6.1-war.zip). Die Abhängigkeiten sind eingebettet. tree`:

jar -tf axis2.war | grep geronimo-ws-metadata 

Ausgang

WEB-INF/lib/geronimo-ws-metadata-LICENSE.txt 
WEB-INF/lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar