Dernières je rencontrais un bogue dans l'environnement de production, qui est lorsque l'accès utilisateur une page de la liste des coupons, il avait en dessous de l'erreurcomment pourrait laisser NoClassDefFoundError exposée durant la phase de compilation
java.lang.NoClassDefFoundError: com/myapp/common/util/WrappedBeanCopier
Et la dépendance Maven est comme ça
myapp
- coupon
- common 2.0
- common 1.0
et WrappedBeanCopier
que dans common 2.0
et monapp effectivement utilisé est common 1.0
, donc causé cet accident se produise.
Je veux savoir pourquoi il peut être compilé et déployé sur tomcat avec succès? Avoir une certaine manière pourrait le laisser être exposé dès que possible? par exemple. la compilation a échoué.
Le déploiement s'est déroulé avec succès car vous disposez des deux fichiers jar dont vous avez besoin. Donc les dépendances sont satisfaites. Mais à l'exécution, vous ne pouviez pas choisir dans quel ordre votre pot est chargé à partir du conteneur Web. Donc, si vous avez des classes avec le même nom, il se peut que vous chargiez la mauvaise classe et que vous trouviez un tel * NoClassDefFoundError *. Dans cette [page] (https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html), il explique comment éviter ces situations en utilisant l'exclusion dans les dépendances maven. –
La compilation a lieu dans un environnement; l'exécution se passe dans un autre. C'est à vous de vous assurer que le chemin de classe utilisé pendant la compilation est le même que le chemin de classe pendant l'exécution. – EJP