Попробуйте добавить приведенную ниже зависимость, если ее нет в вашем pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
Из вашей трассировки стека видно, что
java.lang.NoClassDefFoundError:
org/springframework/transaction/interceptor/TransactionAttributeSource
так что зависимость может быть отсутствует , или, поскольку вы недавно обновили версию для весны, это может вызвать некоторые несовместимые проблемы с версиями для вашей зависимости от транзакции. Попробуйте добавить вышеуказанную зависимость, чтобы устранить эту проблему. Проверьте зависимости, чтобы убедиться, что вы не ссылаетесь ни на какие старые jar-файлы, которые извлекают эту конкретную зависимость, если это так, проверьте, почему она не извлекает эту зависимость после обновления.
Если вы используете spring-boot , то эта зависимость должна быть частью spring-boot-autoconfigure
или spring-boot-starter-jdbc
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
Ошибка NoClassDef обычно возникает, когда у вас есть класс во время компиляции, но он не присутствует во время выполнения. Пожалуйста, проверьте ваши maven-зависимости полностью на наличие конфликтов jar-файлов. Это может быть возможной причиной для NoClassDef. Проверьте файл pom.xml и перейдите на вкладку иерархии зависимостей, чтобы убедиться, что вы не видите один и тот же файл jar с разными версиями дважды.
Если у вас есть конфликты, вы можете удалить один из них в зависимости от требуемой версии.
Дерево зависимостей проекта может быть расширено для отображения зависимости
конфликты. Например, чтобы узнать, почему Commons Collections 2.0
используя плагин Maven Dependency, мы можем выполнить
в каталоге проекта:
mvn dependency:tree -Dverbose -Dincludes=commons-collections
См. Официальный документ
Убедитесь, что вы включили только одну spring-tx
в качестве зависимости, если вы добавили более одной в качестве транзитивной зависимости, вы можете сделать исключение, например:
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>