Ткачество одного и того же аспекта в несколько банок

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

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

Я хочу перехватить все функции HasNext () и Next () с одним и тем же аспектом, чтобы мой итог отслеживался по всем файлам jar, а не по каждому отдельному.

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

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

2 ответа

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

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

Так что есть 2 способа

  1. если вы используете затмение:

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам