AspectJ: Как получить баллы для консультирования классов, расположенных в других проектах - PullRequest
6 голосов
/ 09 сентября 2010

Это должно быть просто.

Вопрос
Как вы получаете pointcut в одном проекте, чтобы посоветовать код / ​​классы в другом проекте?


Контекст
Я работаю в затмении с двумя проектами.Для простоты объяснения давайте назовем один научный проект , а другой математический проект и скажем, что научный проект опирается на математический проект иЯ работаю над обоими проектами одновременно.Математический проект является базовым продуктом, и его работа будет проще, если я не сильно изменю код.

В настоящее время я отлаживаю взаимодействие между этими двумя проектами.Чтобы помочь с этим, я пишу Аспект (в рамках научного проекта) для регистрации ключевой информации при выполнении математического кода (и научного кода).


Пример
Я запускаю простой пример аспекта:
package org.science.example;

public aspect ScientificLog {
    public pointcut testCut() : execution (public * *.*(..));
    before() : testCut() {
        //do stuff
    }
}


Задача
Проблема в том, что независимо от того, какой pointcut я создаю, он только советует код из научный проект .Классы из org.math.example не являются перекрестными, ВСЕ!

Я попытался добавить математический проект в inpath научного проекта .перейдя к proect properties > AspectJ Build > Inpath и нажав добавить проект и выбрав математический проект .Это не сработало, но, похоже, мне нужно что-то сделать в этом направлении.

Заранее спасибо за любые предложения ...

-gMale


РЕДАКТИРОВАТЬ 1:
С тех пор, как я написал это, я заметил, что проект выдает следующую ошибку:
Caused by: org.aspectj.weaver.BCException: Unable to continue, this version of AspectJ
supports classes built with weaver version 6.0 but the class
com.our.project.adapter.GenericMessagingAdapter is version 7.0
when batch building BuildConfig[null] #Files=52 AopXmls=#0

Так что, возможно, все настроено правильно, и ошибка более тонкая.Кстати, упомянутый класс от «научного проекта», так сказать.Это происходит даже после того, как я уберу проект.Я в настоящее время гуглю эту ошибку ...


РЕДАКТИРОВАТЬ 2:
Я нашел решение ошибки выше в комментарий № 5 здесь

Проблема в том,pom-файл aspectj-plugin объявляет зависимость от aspectjtools версии 1.6.7.Таким образом, при настройке плагина эта временная зависимость должна быть изменена.Ниже приведен фрагмент кода для файла pom, который устраняет проблему, указав версию 1.6.9 вместо 1.6.7:

                    <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>aspectj-maven-plugin</artifactId>
                            <version>1.3</version>
                            <dependencies>
                                <dependency>
                                    <groupId>org.aspectj</groupId>
                                    <artifactId>aspectjtools</artifactId>
                                    <version>1.6.9</version>
                                </dependency>
                            </dependencies>
                            <configuration>
                                    <source>1.6</source>
                                    <target>1.6</target>
                            </configuration>
                            <executions>
                                    <execution>
                                            <goals>
                                                    <goal>compile</goal>
                                                    <goal>test-compile</goal>
                                            </goals>
                                    </execution>
                            </executions>
                    </plugin>

Ответы [ 2 ]

5 голосов
/ 11 сентября 2010

Ваша вторая проблема не связана с первой.Он говорит, что com.our.project.adapter.GenericMessagingAdapter был изначально скомпилирован и сплетен с новой версией AspectJ, но используется для бинарного переплетения со старой версией AspectJ.например, когда вы пытаетесь запустить классы Java, скомпилированные под 1.6, на 1.5 ВМ.

Номер версии был увеличен для выпуска AspectJ 1.6.8 (я думаю, или, возможно, это был 1.6.7).

Решение состоит в том, чтобы убедиться, что вы используете последнюю версию AspectJ для всех своих проектов (например, 1.6.9 или dev-сборок 1.6.10).

2 голосов
/ 09 сентября 2010

Когда вы добавляете проект Math в проект in path, весь код математического проекта отправляется через ткацкий станок aspectj и правильно сплетается. Результаты этого переплетения записываются в выходную папку научного проекта (не в проект Math). Итак, если вы заглянули в папку bin научного проекта, вы должны увидеть там сплетенные классы.

Если вы хотите сохранить файлы входных путей отдельно от обычных файлов, вы можете указать папку входных выходов. Эта папка также должна быть добавлена ​​в путь к классам как двоичная папка. Кроме того, эта папка должна располагаться над зависимостью проекта от проекта Math на вкладке «Экспорт и порядок» на странице сборки Java для проекта Science.

Наконец, если вы запустите основной класс из научного проекта, а не из математического проекта, вы будете выполнять тканый код.

...