2010-04-26 7 views
9

J'utilise l'objectif eclipse:eclipse pour générer un environnement de projet Eclipse. Le déploiement fonctionne correctement. L'objectif crée les entrées de chemin de classe var pour toutes les dépendances nécessaires.La webapp Maven avec maven-eclipse-plugin ne génère pas <dependent-module>

Avec m2eclipse il y avait le conteneur Maven qui définit un dossier d'exportation qui était WEB-INF/lib pour moi. Mais je ne veux pas compter sur m2eclipse donc je ne l'utilise plus.

les entrées de chemin de classe qui sont générés par eclipse:eclipse but ne sont pas un dossier d'exportation.

Lors du démarrage du conteneur de servlet avec WTP, il publie toutes les ressources et classes à l'exception des bibliothèques dans le contexte.

Que manque-t-il pour publier les bibliothèques nécessaires, ou n'est-ce pas possible sans l'intégration de m2eclipse?

Environnement

  • Eclipse 3.5 Java EE Galileo
  • Apache Maven 2.2.1 (r801777; 06/08/2009 21: 16: 01 + 0200)
  • version Java: 1,6. 0_14
  • m2eclipse

La configuration plugin maven-eclipse

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.8</version> 
    <configuration> 
     <projectNameTemplate>someproject-[artifactId]</projectNameTemplate> 
     <useProjectReferences>false</useProjectReferences> 
     <downloadSources>false</downloadSources> 
     <downloadJavadocs>false</downloadJavadocs> 

     <wtpmanifest>true</wtpmanifest> 
     <wtpversion>2.0</wtpversion> 
     <wtpapplicationxml>true</wtpapplicationxml> 
     <wtpContextName>someproject-[artifactId]</wtpContextName> 

     <additionalProjectFacets> 
     <jst.web>2.3</jst.web> 
     </additionalProjectFacets> 
    </configuration> 
    </plugin> 

Les fichiers générés

Après l'exécution de l'objectif eclipse:eclipse, le module dépendant ne figure pas dans mon généré .settings/org.eclipse.wst.common.component, donc au démarrage du système i manque serveur la depdencies.

C'est ce que je reçois:

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="someproject-core"> 
    <wb-resource deploy-path="/" source-path="src/main/java"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <wb-resource deploy-path="/" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

Mise à jour pour les lecteurs à venir

Le problème ici est le packaging déviant -type, si u utiliser maven-eclipse-plugin s'il vous plaît valider l'utilisation de <packaging>war</packaging> ou ear.

Les problèmes suivants sont marqués des situations dans lesquelles j'ai deux cycles de vie de construction dans un pom maven.

+1

Êtes-vous sûr que le 'maven-eclipse-Plugin' est correctement configuré dans le projet sur lequel vous exécutez' Eclipse: eclipse' Pourquoi obtenez-vous un projet 'version = "1.5.0"' ? C'est bizarre, cela ne reflète pas la configuration –

+0

C'est exactement ce que j'ai collé, très étrange.Je peux supprimer les fichiers 'eclipse' et exécuter' eclipse: eclipse' de nouveau, il produit la même sortie – codevour

+1

Je peux ' Reproduis le problème Peux-tu poster tout ton pom? (peut-être sur http://pastie.org si c'est trop grand) –

Répondre

4

Qu'est-ce qui manque pour publier les librairies nécessaires, ou n'est-ce pas possible sans l'intégration de m2eclipse?

Je ne suis pas sûr de comprendre le problème. J'ai utilisé le maven-eclipse-plugin avec webapps maven pendant une longue période avec succès. Alors, le déploiement sur un serveur fonctionne-t-il ou non? L'application est-elle utilisable ou non?Pouvez-vous clarifier? Juste au cas où, j'ai fait un test rapide sur une nouvelle application Web avec votre configuration de plugin qui semble ok. Je viens enlevé la facette jst.java et configuré le maven-compiler-plugin à la place:

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <target>1.5</target> 
    <source>1.5</source> 
    </configuration> 
</plugin> 

Et j'ai ajouté une dépendance à l'égard log4j. Puis, quand je lance mvn eclipse:eclipse, voici ce que je reçois dans le produit .settings/org.eclipse.wst.common.component:

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-Q2713648"> 
    <property name="context-root" value="example-mvn-[artifactId]"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <property name="java-output-path" value="/target/classes"/> 
    <dependent-module archiveName="log4j-1.2.14.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"> 
     <dependency-type>uses</dependency-type> 
    </dependent-module> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

La dépendance log4j est là et est publié. Qu'est-ce que j'ai raté?


Mise à jour: Je collé le pom fourni dans mon projet war, il a changé d'utiliser la version 2.8 du plugin Eclipse et retiré src/main/webapp de l'élément resources (ce n'est pas une ressource) et ce que je obtenir en cours d'exécution :

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-Q2713648"> 
    <property name="context-root" value="example-mvn-[artifactId]"/> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <property name="java-output-path" value="/target/classes"/> 
    <dependent-module archiveName="hsqldb-1.8.0.10.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar"> 
     <dependency-type>uses</dependency-type> 
    </dependent-module> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

Cela me semble bien.

Mise à jour 2: Comme je l'ai écrit dans un commentaire à votre réponse, je ne pense pas que le plugin Eclipse va générer un module web dynamique pour un projet avec un emballage de type jar. Si vous modifiez l'emballage war, il doit se comporter comme prévu. Je suis à peu près sûr que c'est la cause de vos problèmes.

+0

Merci pour votre réponse, cela m'aide pour ce que je dois attendre. Mais j'ai ajusté ma question, malheureusement je ne reçois pas ce truc de ', peut-être que quelque chose d'autre ne va pas? – codevour

+0

J'ai ajouté l'exemple pom de mon projet dans une réponse supplémentaire, juste pour vous informer. – codevour

+0

Oui, nous avons découvert le problème. Comme j'ai changé 'jar' en' war', il génère le ''. Pour moi, il n'est pas implémenté de manière cohérente, pourquoi le 'maven-eclipse-plugin' se soucie-t-il de la définition de l'emballage? ... Awwww c'est si mauvais, parce que j'ai besoin des capacités de 'webapp' et le' war-packaging' mais mon artefact doit être un 'pot '. Malheureusement, je n'ai plus d'idées ... en avez-vous une de plus? :) – codevour

0

Le example pom (on pastie.org)

J'ai enlevé ~ 60 dépendances du côté de ce rien changé pom.xml d'origine. Il vous suffit de créer le webapp-archetype et collez le pom dans le produit (par la commande archétype)

mvn archetype:create 
    -DgroupId=example 
    -DartifactId=mvn 
    -DarchetypeArtifactId=maven-archetype-webapp 

Après cette eclipse:eclipse conduit à la généré .settings/org.eclipse.wst.common.component qui montre maintenant project-version="2.0" (après que je l'ai fait divers changements de 1,0 à 1,5 et 2.0) mais il manque toujours le <dependent-module>.

<project-modules id="moduleCoreId" project-version="2.0"> 
    <wb-module deploy-name="example-mvn-mvn"> 
    <wb-resource deploy-path="/" source-path="src/main/webapp"/> 
    <wb-resource deploy-path="/" source-path="src/main/resources"/> 
    </wb-module> 
</project-modules> 

Mise à jour (@Pascal Thivent): Ceci est un bon point. Notre projet (un framework web) a en fait deux fonctionnalités mixtes. Il est le jar-packaging qui est utilisé pour fournir les capacités cadres, lors de l'exécution elle se développe dans la webapp structure (WEB-INF/...)

Mais il devrait également être possible d'exécuter le cadre avec ses extensions sur un conteneur de servlet lui-même, afin que nous puissions Développer la fonctionnalité de base sans l'empaqueter comme un pot et l'utiliser avec un projet personnalisé. Donc, le jar est correct ici.


Mise à jour 2

Le source code (EclipseWtpComponentWriter) du maven-eclipse-plugin montre que ce hardcoded et il n'y a aucun moyen de courir dans la clause then, sauf la mise packaging-war, ou ai-je raté quelque chose? :(

private void writeModuleTypeComponent(XMLWriter writer, String packaging, 
       File buildOutputDirectory, EclipseSourceDir[] sourceDirs, 
       ArtifactRepository localRepository) 
{ 
    if (Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase(packaging)) 
    { 
     // Adding the <dependent-modules> stuff 
    } 
} 
+0

Oh, vous avez supprimé votre commentaire, de toute façon j'ai ajouté une explication pour le «emballage jar». – codevour

+2

Oui, je l'ai enlevé parce que je pensais que vous m'attendiez à coller le contenu de votre pom dans un projet de guerre. Mais maintenant que vous relisez votre question, je pense que nous avons trouvé le problème: je ne pense pas que le plugin eclipse va générer un webmodule dynamique pour un projet avec un empaquetage de type 'jar'. Si vous le changez en 'war', il devrait se comporter comme prévu. –