Frage

Ich las einige nützliche Beiträge hier auf SO über frühere Maven Fragen, ich bin zur Zeit sehr interessiert am Lernen Maven (weil ich es mag, und weil mein Chef verlangt von mir zu). Ich lese zur Zeit [diese] [1] Buch und ich bin meinen Weg Trog Beispiele arbeiten. Es ist ein einfaches Buch aber sein hat einige Fehler im Innern (trivialen), noch für einen Neuling wie ich kann hart sein, zu erkennen, einmal gesichtet kann es leicht behoben werden. Gibt es ein anderes Buch besser zu verstehen Maven von oben nach unten?

Der zweite Teil der Frage ist im Zusammenhang ein Beispiel in diesem Buch, vielleicht eine einfache Erklärungen meine Zweifel lösen würde.

Hier ist das Ding ist, habe ich ein simple-weather Projekt in Java, die die Wetterbedingungen von Yahoo Wetter-Server abruft, angesichts der besonderen Postleitzahl es Wetterdaten zurückgibt.

Dann habe ich eine ‚simple-Webapp‘ (mit Maven sowie die über ich vergessen zu erwähnen), die im Grunde ein Web-Projekt, das eine Standard-Servlet mit Maven bereits dort hat und es tut nichts.

Und ich habe einige parent-project ich diese zwei Projekte in einem wollen fusionieren, so habe ich eine pom.xml, die zwei Module hat, 1 info (Java-Projekt) abzurufen und andere es auf dem Netz (Web App) angezeigt werden soll.

habe ich alle Arbeit am Ende, aber hier ist das Seltsame .. wenn ich Webapp eine beliebige Zeichenfolge „name“ mache angezeigt werden kann sagen, es dann unabhängig baut, ist es genau diese Zeichenfolge kann nicht gedruckt werden. Aber wenn ich die Webapp in der „Eltern-Projekt“ setzen und diese Zeichenfolge ändern, um „name1“ und bauen sie als sa partent-Projekt Submodul .. nichts ändert ..

Also ich zurück zu dem Punkt gehen, weil einfach Webapp abhängig von einfach-Wetter ist ich es nicht bauen kann mehr auf seinem eigenen, so jetzt, wenn ich möchte einige Änderungen an das Webapp machst .. ändern Sie den Webapp außerhalb der „Eltern-Projekt“ bauen es gibt sie dann an die Eltern-Projekt einfügen zurück und dann werden die Änderungen zu übernehmen, warum ist das so, warum nicht direkt ich den Servlet-Inhalt ändern / oder ein anderes hinzufügen in der Webapp als Teil das "Eltern-Projekt"?

Danke .. Ich weiß, ihr eine lange und langweilige Frage, aber ich versuche nur, Dinge zu lernen, und es gibt keine besseren Ort zu fragen, als hier: D

EDIT - hier sind POM FILES für jedes Projekt:

1. einfach erziehende pom.xml

 <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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sonatype.mavenbook.multi</groupId>
    <artifactId>simple-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Multi Chapter Simple Parent Project</name>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

2. einfach Wetter pom.xml

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-weather</artifactId>
<packaging>jar</packaging>
<name>Multi Chapter Simple Weather API</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

3. simple-Webapp pom.xml

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>simple-webapp Maven Webapp</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-weather</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
War es hilfreich?

Lösung

Ich bin nicht sicher, vollständig verstehe Ihre Frage. Doch lassen Sie uns einige Grundsätze in Maven erklären.

So Sie eine solche Struktur haben:

parent
  + simple-weather
  + simple-webapp

Auf einer Maven Sicht haben wir 3 Projekte hier:

  • Eltern , die ein pom Projekt ist (das heißt seine packaging Attribut wird auf pom)
  • einfach Wetter , die ein jar Projekt ist und Eltern als Elternteil.
  • simple-Webapp , die ein war Projekt ist, hat Eltern als Eltern und einfach Wetter als Abhängigkeit.

Die übergeordneten Projekte verwenden zwei Konzepte in Maven:

  • Die Erbschaft, die sagt, dass alle seine Kinder ( einfach Wetter und simple-Webapp ) werden alle seine Eigenschaften (dieses Konzept erbt fast die gleiche Sache als extends in Java).
  • Die Aggregation, die durch die Definition von <modules> definiert ist. Aggregation bedeutet, dass jeder Befehl, der für das Projekt laufen wird auch auf jedem module ausgeführt werden.

Was passiert, wenn ich (mit mvn clean install) bauen auf die Eltern Verzeichnis?

  1. Maven wird "übersetzen" die Eltern Projekt und dann Installieren die pom.xml im lokalen Repository.
  2. Maven wird die einfach Wetter Projekt kompilieren, aber da es einen Elternteil hat, Maven wird die übergeordnete pom.xml-Datei in das lokale Repository suchen. Sobald die JAR erstellt wird, ist es im lokalen Repository installiert ist.
  3. Maven wird schließlich kompilieren die simple-Webapp Projekt. Maven wird die gleiche Sache für die Eltern pom.xml tun, sondern auch für die einfach Wetter Projekt.

Die Situtation im 3. Punkt erklärt ist wichtig: Wenn Sie das simple-Webapp Projekt Maven wird immer bauen wollen versuchen, alle seine Abhängigkeiten zu finden - einschließlich einfach Wetter -. aus dem lokal (oder entfernt) Repository

Das ist, warum, wenn Sie bauen nur die simple-Webapp ohne den Aufbau und die Installation von einfach Wetter , Maven das letztere Projekt nicht finden, oder wird eine ältere Version.

Um es zusammenzufassen, wenn Sie auf Multi-Module Projekt mit Maven arbeiten, versuchen, immer den Build ausführen und installieren Befehle von der Wurzel (oder Eltern) Verzeichnis.

Ich hoffe, dass diese Erklärung klar genug ist und helfen Ihnen zu verstehen, was in Ihrem Fall passieren. Zögern Sie nicht mehr Informationen fragen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top