Domanda

Ho letto alcuni messaggi utili qui su SO su questioni Maven precedenti, sono attualmente molto interessati ad apprendere Maven (perché mi piace e perché il mio capo mi impone di). Attualmente sto leggendo [questo] [1] libro e sto lavorando il mio modo esempi di valle. Il suo un libro semplice, ma la sua ha alcuni errori interni (quelli banali), ma per un principiante come me può essere difficile da individuare, una volta individuato può essere facilmente risolto. C'è un altro libro migliore per capire Maven da cima a fondo?

Seconda parte della domanda è relativa un esempio in questo libro, forse un semplice spiegazioni sarebbero risolvere i miei dubbi.

Questa è la cosa, ho fatto un progetto simple-weather in java che recupera le condizioni meteorologiche da server di yahoo tempo, data la particolare codice di avviamento postale restituisce le informazioni meteo.

Poi ho fatto un 'semplice webapp' (con Maven, così come quello di cui sopra ho dimenticato di dire che), che è basicaly un progetto web che ha un po 'di servlet predefinito già lì con Maven e non fa nulla.

E ho qualche parent-project voglio unire i due progetti in uno, così ho fatto un pom.xml che ha 2 moduli, 1 per recuperare informazioni (progetto Java) e altri per visualizzarlo sul web (web app).

Ho fatto funzionare tutto alla fine, ma qui è la cosa strana .. se faccio visualizzare webapp qualsiasi "nome" stringa permette di dire poi costruire in modo indipendente, fa esattamente stampa quella stringa. Ma quando ho messo il webapp nel "genitore-progetto" e cambiare questa stringa a "nome1" e costruire come modulo sub sa partent-progetto .. non cambia nulla ..

Quindi torno al punto, perché semplice webapp-dipende dalla semplice-tempo non riesco a costruirlo più da sola, così ora se voglio apportare alcune modifiche al webapp .. modificare la webapp di fuori del "genitore-progetto" costruirlo lì poi incollarlo indietro al genitore-progetto e poi applicherà le modifiche, perché è che, perché non posso cambiare direttamente il contenuto servlet / o aggiungere un altro in webapp come la parte di il "genitore-progetto"?

Grazie .. So che è una domanda lunga e noiosa, ma sto solo cercando di imparare le cose e non c'è posto migliore per chiedere che qui: D

Modifica - Queste POM file per ogni progetto:

1. semplice-genitore 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. semplice-tempo 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. semplice 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>
È stato utile?

Soluzione

Non sono sicuro di capire completamente la tua domanda. Tuttavia, cerchiamo di spiegare alcuni principi di Maven.

In modo da avere una struttura del genere:

parent
  + simple-weather
  + simple-webapp

Su un punto di vista Maven, abbiamo 3 progetti qui:

  • parent , che è un progetto pom (cioè l'attributo packaging è impostato pom)
  • semplice-tempo , che è un progetto jar e ha genitori come genitore.
  • semplice webapp , che è un progetto war, ha genitori come genitore e semplice-tempo come dipendenza.

I progetti genitore usa due concetti in Maven:

  • L'eredità, che dicono che tutti i suoi figli ( semplice-tempo e semplice webapp ) erediterà tutte le sue proprietà (questo concetto è quasi la stessa cosa come il extends in Java).
  • L'aggregazione, che è definita dalla definizione di <modules>. Aggregazione significa che ogni comando che verrà eseguito su progetto sarà inoltre eseguito su ogni module.

Che cosa succede se io costruisco (utilizzando mvn clean install) sulla genitori directory?

  1. Maven sarà "compilazione" genitori progetto e poi install il pom.xml nel repository locale.
  2. Maven compilerà il semplice-tempo progetto, ma in quanto ha un genitore, Maven cercherà il file pom.xml genitore nel repository locale. Una volta creato il JAR, viene installato nel repository locale.
  3. Maven finalmente compilare il semplice webapp di progetto. Maven farà la stessa cosa per il pom.xml genitore, ma anche per il semplice-tempo progetto.

Il situtation spiegato nel 3 ° punto è importante: se si vuole costruire il semplice webapp di progetto, Maven sarà sempre cercare di trovare tutte le sue dipendenze - tra cui semplice-tempo -. dal repository locale (o lontano)

Ecco perché se si crea solo il semplice webapp senza costruire e l'installazione di semplice-tempo , Maven non troverà quest'ultimo progetto, o troverà una versione precedente.

Quindi, per riassumere, quando si lavora su progetto multi-moduli con Maven, tentare di eseguire sempre la compilazione e l'installazione comandi dalla radice (o il genitore) directory.

Mi auguro che questa spiegazione è abbastanza chiaro e ti aiuti a capire cosa succede nel tuo caso. Non esitate a chiedere ulteriori informazioni ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top