org.springframework.beans.factory.BeanDefinitionStoreException Не удалось прочитать класс компонента-кандидата - PullRequest
0 голосов
/ 19 февраля 2019

Я прочитал похожий пост , но все еще не могу решить эту проблему.Я использую JDK 8 и Spring 5. Так что это не связано с проблемой версии.

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [G:\githome\product-aggregation\target\classes\com\roger\product\ipc\viewobject\product\MultiUnitVO.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 90
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:454)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:316)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:275)
at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:288)

Caused by: java.lang.ArrayIndexOutOfBoundsException: 90
at org.springframework.asm.ClassReader.readUTF(ClassReader.java:2646)
at org.springframework.asm.ClassReader.readUTF8(ClassReader.java:2618)
at org.springframework.asm.ClassReader.readMethod(ClassReader.java:1110)
at org.springframework.asm.ClassReader.accept(ClassReader.java:729)
at org.springframework.asm.ClassReader.accept(ClassReader.java:527)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:65)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:430)
... 20 common frames omitted

Это так.Я разработал плагин Maven и включил его в свой проект.Этот плагин используется для генерации полей для определенных классов в фазе классов процессов.Чтобы добиться этого, я использовал ASM (версия 5.0) для изменения классов.Зависимость Maven, такая как:

<dependencies>
<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>2.0</version>
</dependency>
<dependency>
  <groupId>com.roger</groupId>
  <artifactId>permission</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>
<dependency>
  <groupId>javassist</groupId>
  <artifactId>javassist</artifactId>
  <version>3.12.1.GA</version>
</dependency>
<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.2</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.codehaus.plexus</groupId>
  <artifactId>plexus-utils</artifactId>
  <version>3.0.8</version>
</dependency>
<dependency>
  <groupId>org.ow2.asm</groupId>
  <artifactId>asm</artifactId>
  <version>5.0</version>
</dependency>
<dependency>
  <groupId>org.ow2.asm</groupId>
  <artifactId>asm-tree</artifactId>
  <version>5.0</version>
</dependency>

Затем я включил ее в свой проект.

 <plugin>
    <groupId>com.roger</groupId>
    <artifactId>authorization-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <executions>
      <execution>
        <id>execution1</id>
        <phase>process-classes</phase>
        <goals>
          <goal>addFieldPermission</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Мой проект также имеет косвенную зависимость от ASM (версия 5.0.4).Я даже обновил ASM до 5.0.4 (так же, как и у проекта), он все еще работает неправильно.

Dependency popup

Я сомневался, что это из-за конфликта ASM, но имеюпонятия не имею как это исправить.Любая идея?

EDIT Кажется, у него есть проблемы с измененным классом.Я отладил ClassPathScanningCandidateComponentProvider (spring-context-5.0.8) и обнаружил, что исключение выдается из строки 430 только для измененных ресурсов (как я уже сказал, я добавил некоторые поля в них с помощью плагина maven).Но я декомпилировал измененные классы, используя javap, и обнаружил, что это правильно.Я думаю, что есть проблема с измененными классами, но не знаю, что это.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Наконец-то я получил временное решение.Я сделал поля общедоступными, удалил сгенерированные методы, и все идет хорошо.

Сгенерированные методы являются основной причиной.Когда я сохраняю только сгенерированные поля, Spring Boot запускается успешно.Кажется, javassist 3.12.1.GA может пойти не так с JDK 1.8.Я буду дальше расследовать.

0 голосов
/ 19 февраля 2019

Как указано в журнале ошибок, это чистый индекс из связанной исключительной ситуации.

Причина: java.lang.ArrayIndexOutOfBoundsException: 90

...