Pregunta

He leído algunos mensajes útiles aquí en lo que alrededor de Maven preguntas anteriores, estoy actualmente muy interesado en el aprendizaje experto (porque me gusta y porque mi jefe me obliga a). Actualmente estoy leyendo [esto] [1] libro y estoy trabajando mis ejemplos mínimas manera. Es un libro sencillo, pero tiene algunos errores de su interior (triviales), sin embargo, para un novato como yo puede ser difícil de detectar, una vez descubierto que se puede fijar fácilmente. ¿Hay algún otro libro para comprender mejor experto de arriba a abajo?

La segunda parte de la pregunta es relacionar un ejemplo en este libro, tal vez un simple explicaciones resolverían mis dudas.

Aquí está la cosa, hice un proyecto simple-weather en Java que recupera las condiciones de tiempo en tiempo servidor de yahoo, teniendo en cuenta el código postal en particular devuelve información sobre el clima.

A continuación, hice un 'simple-webapp' (con Maven, así como la de arriba se me olvidó mencionar que), que es, básicamente, un proyecto web que tiene algunas servlet por defecto ya allí con Maven y no hace nada.

Y tengo algo de parent-project quiero fusionar los dos proyectos en uno solo, así que hice una pom.xml que tiene 2 módulos, 1 para recuperar información (proyecto de Java) y otra para mostrarla en la web (aplicación web).

Hice todo el trabajo al final, pero aquí está lo raro .. si hago webapp muestra ningún "nombre" cadena permite decir luego construir de forma independiente, que se imprime exactamente esa cadena. Pero cuando pongo la aplicación web en el "padre-proyecto" y cambiar esta cadena para "nombre1" y hacerlos como módulo de sub-proyecto partent sa .. nada cambia ..

Así que vuelvo al punto, porque es sencilla-webapp depende de las condiciones meteorológicas sencilla No puedo construirlo más por su propia cuenta, por lo que ahora si quiero hacer algunos cambios a la aplicación de web .. modificar el webapp fuera del "padre-proyecto" construir allí luego pegarlo de nuevo a la relación padre-proyecto y luego aplicará los cambios, por eso es que, ¿por qué no puedo cambiar directamente el contenido servlet / o añadir otra en la aplicación Web como parte de el "padre-proyecto"?

Gracias .. Sé que es una pregunta larga y aburrida, pero sólo estoy tratando de aprender cosas y no hay mejor lugar para preguntar que aquí: D

Editar - ESTÁ AQUÍ POM ARCHIVOS para cada proyecto:

1. sencilla y padres 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. pom.xml sencilla-tiempo

<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 aplicación web 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>
¿Fue útil?

Solución

No estoy seguro de entender completamente su pregunta. Sin embargo, vamos a explicar algunos de los principios en Maven.

Así que tiene una estructura de este tipo:

parent
  + simple-weather
  + simple-webapp

Desde un punto de vista Maven, tenemos 3 proyectos aquí:

  • padres , que es un proyecto pom (es decir, su atributo packaging se establece en pom)
  • sencilla de clima , que es un proyecto jar y tiene padres como padre.
  • simple aplicación web , que es un proyecto war, tiene padres como padre y sencilla de clima como dependencia.

Los proyectos de los padres utiliza dos conceptos en Maven:

  • La herencia, que dicen que todos sus hijos ( sencilla de clima y simple aplicación web ) heredará todas sus propiedades (este concepto es casi la misma cosa como el extends en Java).
  • La agregación, que se define por la definición de <modules>. La agregación significa que cada comando que se ejecuta en el proyecto también se llevará a cabo en cada module.

¿Qué ocurre si construyo (usando mvn clean install) en el padres directorio?

  1. Maven "compilar" el padres proyecto y luego instalar el pom.xml en el repositorio local.
  2. Maven compilar el sencilla de clima proyecto, pero ya que tiene un padre, Maven buscará el archivo pom.xml padres en el repositorio local. Una vez creado el archivo JAR, se instala en el repositorio local.
  3. Maven finalmente compilar el simple aplicación web proyecto. Maven hará lo mismo para el pom.xml padres, sino también para el sencilla de clima proyecto.

El situtation explica en el 3er punto es importante: Si usted quiere construir la simple aplicación web proyecto, Maven siempre tratar de encontrar todas sus dependencias - incluyendo sencilla de clima -. desde el repositorio local (o distante)

Es por eso que si se construye sólo el simple aplicación web sin la construcción e instalación de sencilla de clima , Maven no encontrará este último proyecto, o se encontrará una versión más antigua.

Para resumir, cuando se trabaja en proyecto de varios módulos con Maven, intente ejecutar siempre la construcción e instalación de los comandos de la raíz (o el padre) guía.

Espero que esta explicación es bastante clara y le ayudará a entender lo que sucede en su caso. No dude en solicitar más información ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top