Ткачество одного и того же аспекта в несколько банок - PullRequest
0 голосов
/ 30 сентября 2011

У меня были проблемы с корректным переплетением этого проекта с AspectJ (ajc).Вот ситуация:

Я использую библиотеку сравнительного анализа под названием DaCapo Benchmarks, и в ней я пытаюсь перехватить все вызовы Iterator.HasNext () и Next () [академическое исследование].Похоже, что это работает в вакууме, однако DaCapo работает таким образом, что его собственный jar содержит другие jar-файлы, которые он извлекает в соответствии с тем, какой эталонный тест я хочу запустить вместе с его зависимостями и запускает его.чтобы перехватить все HasNext () и Next () с одним и тем же аспектом, чтобы мои итоги отслеживались по всем jar-файлам, а не по каждому отдельному.Я полностью готов ответить на любые ваши вопросы, чтобы помочь мне справиться с этой странной проблемой.

PS У меня странное ощущение, что это на самом деле не выполнимо, но тест в затмении с AJDT (Я использую raw aspectj с ajc для ткачества тестов DaCapo) намекает на такую ​​возможность.

Ответы [ 2 ]

1 голос
/ 08 июля 2014

Я знаю, что слишком поздно, но может помочь кому-то еще..

Что бы я не понял из вашего вопроса, вы хотите помахать одним и тем же аспектом в нескольких банках.

Таким образом, есть 2 способа

  1. , если вы используете eclipse:

Затем создайте проект аспекта и перейдите к его свойствам> нажмите на вариант построения аспектана левой панели> выберите вкладку inpath на правой панели> теперь нажмите на добавление внешних jar-файлов> добавьте jar-файлы, в которые хотите переместить аспект,> нажмите OK

, снова перейдите к его свойствам> щелкните по параметру сборки аспекта вЛевая панель> выберите вкладку «Выходной баночка» на правой панели> и дайте имя новому банку, который вы хотите создать..> нажмите кнопку ОК.

создайте и напишите свой аспект и постройте или очистите ваш проект.Он сгенерирует jar в корневом каталоге проекта по имени, которое вы дали в «output jar», и этот jar будет иметь все jar, которые вы дали в inpath jar с аспектом waved.,Это оно ..

  1. Если вы используете команду propmt, то:

    Напишите свой аспект для перехвата нужных вам методов.> Теперь запустите следующую команду в командной строке:

    ajc -inpath myJar1.jar -inpath myJar2.jar myAspect.java -outjar MyOutputJar.jar

, то есть сгенерирует окончательную банку со всеми вамиупоминается в пути.,Вы можете использовать столько -inpath, сколько jar-файлов, в которые вы хотите добавить код.Для любой ошибки зависимости укажите необходимые jar зависимости в classpath.

0 голосов
/ 02 октября 2011

Если вы используете ткачество во время загрузки, маловероятно, что это возможно.Есть проблема округлости.Вам нужно сплести JDK, но ткачу нужен JDK для загрузки самого себя, и поэтому многие части JDK не могут быть сплетены с использованием LTW.

Итак, вам нужно будет ткачество во время компиляции.Нечто подобное будет работать:

ajc -inpath rt.jar -outjar woven_rt.jar *.aj

Я не уверен, что это ваша проблема, но это может исправить ситуацию.

...