Maven dépendance de contrôle de version et de java.lang.NoClassDefFoundError
J'ai un projet en Java X a dépendance (dans le pom de fichier) sur le projet Y.
J'ai été modifier en Y et construire X,Y avec Maven outil, puis runing X (pour JBoss) sans problèmes.
Quand j'ai ajouté le nouveau de la classe en Y ensuite la construction avec Maven (sans problèmes), puis sous X, il jette java.lang.NoClassDefFoundError
pour la nouvelle classe.
Je pense que c'est une dépendance Maven version ou quelque chose comme ça ... j'ai cherché principalement sur Google, mais rien n'a d'effet... Comment résoudre ce problème??
J'ai constaté que le produit x.jar n'a PAS a un "lib", contenant y.jar ... j'ai ajouté manuellement ... et ça marche très bien ... mais maintenant, Comment faire Maven faire cela automatiquement (dans le cas où c'est une solution correcte)?
OriginalL'auteur Moro | 2009-10-08
Vous devez vous connecter pour publier un commentaire.
Moro, vous avez écrit dans un commentaire que X a la suite de dépendance déclaré:
Premier point. Vous utilisez un "fixe" version ici (par opposition à "
SNAPSHOT
"). Lors de l'utilisation deSNAPSHOT
, maven va automatiquement prendre la dernièreSNAPSHOT
chaque fois que vous construisez. D'autre part, lorsque vous utilisez 1.0, une fois que maven a téléchargé cet artefact, il jamais tente d'obtenir un nouveau 1.0. Donc, vous devez incrémenter Y version ou, si Y est en cours de développement (améliorations, corrections de bugs, etc), vous devriez vraiment utiliserSNAPSHOT
.Pour plus d'informations sur
SNAPSHOT
, consultez le chapitre 9.3.1.2. INSTANTANÉ Versions de Sonatype du livre:Deuxième point. Vous êtes à l'aide d'un
provided
portée. Selon le chapitre9.4.1. La Dépendance De La Portée:
Est-ce vraiment ce que vous voulez? Comment êtes-vous déploiement de X et Y sur JBoss? Ne devriez-vous pas utiliser la valeur par défaut
compile
portée?c'est parce que vous avez besoin de changer la versionnumber en Y pour 1.0-SNAPSHOT puis exécuter mvn install. après cela, la dépendance est disponible
aucun homme, je l'ai déjà fait
Sans plus de détails au sujet de votre maven modules (emballage, versions...), il est difficile de deviner ce qui se passe réellement. Quel type de module J2EE est X? Ce type d'emballage utilisez-vous dans votre pom.xml? Pourriez-vous nous fournir votre pom.xml fichiers?
vous avez tous deux mis à jour le numéro de version dans Y\pom.xml et la référence dans X\pom.xml ?
OriginalL'auteur Pascal Thivent
Avez-vous d'exécuter
mvn install
sur l'axe après l'ajout de la nouvelle classe?OriginalL'auteur Jim Downing
Avez-vous d'installation/déploiement de la nouvelle version de Y, mise à niveau X de dépendances pour le nouveau Y de version, et re-construire X?
OriginalL'auteur matt b
Avez-vous essayé mvn clean sur le projet Y avant que vous avez construit?
OriginalL'auteur Dan Polites
Maven résout les dépendances de dépôts locales et à distance, bien que les IDE des plugins tels que m2eclipse permettra également de résoudre les dépendances qui sont des projets au sein de l'espace de travail. Si vous ne disposez pas d'un tel plugin, vous aurez besoin d'installer artefact Y à un dépôt local ou de le déployer sur un dépôt distant afin que vous et vos collègues peuvent accéder avant Maven reconnaît qu'un changement a été apporté lors de la construction de projet X.
espace de travail de résolution de capture d'écran http://docs.codehaus.org/download/attachments/11403480/project-properties.png
Si les deux projets sont étroitement liés, vous pourriez envisager la création d'un multi-module de construire de sorte que des projets X et Y sont construites en même temps.
OriginalL'auteur Rich Seller
Ok, désolé pour la fin de l'info.
X package est ejb, de sorte que le X.jar n'a pas de répertoire lib.
Alors Y.jar doit être placé dans le Jboss/server/default/lib, il a fonctionné correctement.
Merci pour tout.
OriginalL'auteur Moro