#java #eclipse #maven #aspose
#java #eclipse #maven #aspose
Вопрос:
Я пытаюсь обновить версию электронной почты aspose до 20.7, и я использую java 11 для своего проекта, но я получаю эти исключения. Файл электронной почты aspose находится в пути к классу.
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.*
com.* nested exception is java.lang.NoClassDefFoundError: com/aspose/email/MailMessage
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:502)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282)
... 95 more
Caused by: java.lang.NoClassDefFoundError: com/aspose/email/MailMessage
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:382)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:320)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:798)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:493)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474)
... 97 more
Caused by: java.lang.ClassNotFoundException: com.aspose.email.MailMessage
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
... 113 more
Ответ №1:
Если вы планируете использовать EWSClient API с JDK11 или выше, нам нужно добавить зависимости JAXB. Все остальные Aspose.Email API работает нормально, без каких-либо дополнительных зависимостей.
(API-интерфейсы JAXB считаются API-интерфейсами Java EE и, следовательно, больше не содержатся в пути к классу по умолчанию в Java SE 9. В Java 11 они полностью удалены из JDK. Проблема, описанная в stackoverflow: как разрешить java.lang.Ошибка NoClassDefFoundError: исключение javax / xml / bind / JAXBException в Java 9 1
Зависимости Maven JAXB:
- javax.xml.bind jaxb-api 2.3.1
- com.sun.xml.bind jaxb-impl 2.3.1
- com.sun.xml.bind jaxb-ядро 2.3.0.1
- com.sun.xml.messaging.saaj saaj-impl 1.5.0
Аналогичный вопрос был задан и в следующем потоке. https://forum.aspose.com/t/migrating-aspose-email-to-20-7-with-java-11/219092
Ответ №2:
Управление зависимостями позволяет консолидировать и централизовать управление версиями зависимостей без добавления зависимостей, которые наследуются всеми дочерними элементами. Это особенно полезно, когда у вас есть набор проектов (т. Е. Более одного), который наследует общего родителя.
Другим чрезвычайно важным вариантом использования dependencyManagement является контроль версий артефактов, используемых в переходных зависимостях.
В родительском POM основное различие между зависимостями и dependencyManagement заключается в следующем:
Артефакты, указанные в разделе зависимостей, ВСЕГДА будут включены в качестве зависимостей дочерних модулей.
Артефакты, указанные в разделе dependencyManagement, будут включены в дочерний модуль только в том случае, если они также были указаны в разделе зависимостей самого дочернего модуля.
Вы указываете версию и / или область действия в родительском файле, и вы можете не указывать их при указании зависимостей в дочернем POM. Это может помочь вам использовать унифицированные версии для зависимостей для дочерних модулей, не указывая версию в каждом дочернем модуле.
Например, управление зависимостями РОДИТЕЛЬСКОГО POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-email</artifactId>
<version>${lib.email.aspose.version}</version>
<classifier>jdk16</classifier>
</dependency>
</dependencies>
</dependencyManagement>
Дочерние зависимости POM:
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-email</artifactId>
<classifier>jdk16</classifier>
</dependency>
</dependencies>
Я предлагаю вам создать тестовый проект с помощью maven. Я уверен, что дочерний модуль включал Aspose.Зависимость от электронной почты в разделе зависимостей.