Question

J'ai lu quelques messages utiles ici SO à propos des questions maven précédentes, je suis actuellement très intéressé par Maven d'apprentissage (parce que je l'aime et parce que mon patron me demande de). Je lis actuellement [ce] [1] livre et je travaille mes exemples de creux à sens unique. Son un livre simple, mais son a quelques erreurs à l'intérieur (insignifiantes), mais pour un débutant comme moi peut être difficile à repérer, une fois repéré, il peut être facilement fixé. Y at-il autre livre mieux comprendre maven de haut en bas?

Deuxième partie de la question est relative un exemple dans ce livre, peut-être une des explications simples résoudrait mes doutes.

est la chose, je fait ici un projet simple-weather en java qui récupère les conditions météo de serveur météo Yahoo, étant donné le code particulier, il renvoie des informations météorologiques.

Alors je fait un « simple webapp » (avec Maven, ainsi que celui ci-dessus j'ai oublié de mentionner que), qui est basiquement un projet web qui a une servlet par défaut déjà avec Maven et il ne fait rien.

Et j'ai quelques parent-project Je veux fusionner ces deux projets en un seul, donc je fait un pom.xml qui dispose de 2 modules, 1 à récupérer info (projet java) et d'autres pour l'afficher sur la (application web) web.

J'ai fait tout le travail à la fin, mais voici la chose bizarre .. si je fais webapp afficher une chaîne « nom » permet de dire ensuite construire de manière indépendante, il n'imprime exactement cette chaîne. Mais quand je mets la webapp dans le « parent-projet » et de changer cette chaîne « NAME1 » et le construire comme module sous sa-projet .. partent rien ne change ..

Je reviens donc au point, parce que simple-webapp dépend-temps simple que je ne peux pas construire plus sur lui-même, maintenant si je veux apporter quelques modifications à la webapp .. modifier le webapp en dehors du « parent-projet » bâtissent coller là alors revenir au projet parent et les modifications s'appliqueront, pourquoi est-ce, pourquoi je ne peux pas changer directement le contenu de servlet / ou ajouter un autre dans la webapp comme la partie de le "parent-projet"?

Merci .. Je sais que une question à long et ennuyeux, mais je suis juste essayer d'apprendre des choses et il n'y a pas de meilleur endroit pour demander que ici: D

EDIT - VOICI POM FICHIERS POUR CHAQUE PROJET:

1. simple-parent 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 simple-weather

<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>
Était-ce utile?

La solution

Je ne suis pas sûr de bien comprendre votre question. Cependant, nous allons expliquer certains principes Maven.

Vous avez donc une telle structure:

parent
  + simple-weather
  + simple-webapp

Sur un point de vue Maven, nous avons 3 projets ici:

  • parent , qui est un projet de pom (à savoir son attribut packaging est réglé sur pom)
  • simple-weather , qui est un projet jar et a parent en tant que parent.
  • simple webapp , qui est un projet war, a parent en tant que parent et simple-weather dépendance.

Les projets parents utilisent deux concepts dans Maven:

  • L'héritage, qui disent que tous ses enfants ( simple-weather et simple webapp ) héritera toutes ses propriétés (ce concept est à peu près la même chose comme extends en Java).
  • L'agrégation, qui est défini par la définition de <modules>. L'agrégation signifie que chaque commande qui sera exécuté sur le projet sera également exécuté sur chaque module.

Qu'arrive t-il si je construis (en utilisant mvn clean install) sur la parent

  1. Maven "compilation" parent projet, puis install pom.xml dans le référentiel local.
  2. Maven compiler le projet simple-weather , mais comme il a un parent, Maven regardera le fichier pom.xml parent dans le dépôt local. Une fois que le JAR est créé, il est installé dans le référentiel local.
  3. Maven va enfin compiler le simple webapp projet. Maven fera la même chose pour la pom.xml mère, mais aussi pour le simple-weather projet.

La situtation expliqué dans le 3ème point est important: Si vous voulez construire la simple webapp projet, Maven toujours essayer de trouver toutes ses dépendances - y compris simple-weather -. du dépôt local (ou distant)

Voilà pourquoi si vous construisez seulement le simple webapp sans la construction et l'installation de simple-weather , Maven ne trouvera pas le dernier projet, ou trouvera une version plus ancienne.

Donc, pour résumer, lorsque vous travaillez sur le projet multi-modules avec Maven, essayez d'exécuter toujours la construction et l'installation des commandes à partir du répertoire racine (ou parent).

J'espère que cette explication est assez claire et vous aider à comprendre ce qui se passe dans votre cas. Ne pas hésiter à demander plus d'informations ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top