Spring @ Настраиваемая аннотация с AspectJ

#spring #maven #spring-aop #spring-transactions #compile-time-weaving

#весна #maven #spring-aop #spring-транзакции #переплетение времени компиляции

Вопрос:

Не удается скомпилировать мой проект Aspectj . Существует проблема, связанная с Apache CXF тем, что ResourceContext.getResource(SomeClass.class) создается простой объект, а не управляемый Spring. Итак, я хотел бы использовать ткачество и @Configurable преодолеть эту трудность. Я заставил его работать в моем тестовом приложении Spring Boot (при необходимости я мог бы предоставить ссылку на Github) со следующей настройкой, используя @Configurable себя и @EnableSpringConfigured :

Вот снимок моего pom.xml (Весенняя версия — 4.3.3.RELEASE):

 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
  

и конфигурация aspectj-maven-plugin плагина:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.8</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <complianceLevel>1.8</complianceLevel>
        <showWeaveInfo>true</showWeaveInfo>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
        </aspectLibraries>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  

Однако, когда я пытаюсь применить описанную выше конфигурацию в реальном проекте в моей компании, я получаю эту странную ошибку:

 [ERROR] *path to the java file being weaving* can't determine annotations of missing type javax.transaction.Transactional
[ERROR] when weaving type *the full java class name*
[ERROR] when weaving classes
[ERROR] when weaving
[ERROR] when batch building BuildConfig[null] #Files=27 AopXmls=#0
[ERROR] [Xlint:cantFindType]
[ERROR] error at (no source information available)
  

Мой тестовый проект не использует @Transactional , но реальный использует. Итак, я попытался добавить spring-tx и persistence-api зависимости, но ничего не работает. И последнее замечание: проект создается успешно при втором запуске mvn install и неудачно при каждом запуске mvn clean install .

Любая помощь очень ценится, поскольку я действительно застрял с этой ошибкой.

Ответ №1:

Добавление следующей зависимости к пути к классу должно решить проблему:

 <dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>
  

Комментарии:

1. Спасибо, Стас! Это действительно решило текущую проблему. Теперь я могу создать проект, но, к сожалению, я обнаружил, что некоторые из настраиваемых классов также используют транзакционные. Это вызывает следующую ошибку во время выполнения: Caused by: java.lang.IllegalStateException: Post-processor tried to replace bean instance of type *The original class name* with (proxy) object of type *Some weird weaved proxy class name* - not supported for aspect-configured classes!

2. @snoopy-whoopy Это другая проблема, поэтому откройте для нее новый вопрос. Если вы нашли и ответили, также опубликуйте свой ответ!

3. @cb4 Спасибо за совет! Я нашел ответ, но я новичок здесь, поэтому я должен ответить, например, как обычный ответ или как комментарий к описанию моей проблемы?

4. @snoopy-whoopy Вы должны создать совершенно новый вопрос, а затем опубликовать свой ответ. Это более чистый способ и позволит другим искать эту конкретную проблему. Приветствия!