Ткачество одного и того же аспекта в несколько банок
У меня были проблемы с корректным переплетением этого проекта с AspectJ (ajc). Вот ситуация:
Я использую библиотеку бенчмаркинга под названием DaCapo Benchmarks, и в ней я пытаюсь перехватить все вызовы Iterator.HasNext() и Next() [академические исследования]. Кажется, это работает в вакууме, однако DaCapo работает таким образом, что его собственный jar содержит другие jar-файлы, которые он извлекает в соответствии с тем, какой тест я хочу запустить вместе с его зависимостями и запускает его.
Я хочу перехватить все функции HasNext () и Next () с одним и тем же аспектом, чтобы мой итог отслеживался по всем файлам jar, а не по каждому отдельному.
Я надеюсь, что я выгляжу достаточно ясно. Я полностью готов ответить на любые ваши вопросы, чтобы помочь мне решить эту странную проблему.
PS У меня странное чувство, что на самом деле это не выполнимо, но тест в затмении с AJDT (я использую raw aspectj с ajc для ткачества DaCapo Benchmarks) намекает на такую возможность.
2 ответа
Я знаю, что слишком поздно, но может помочь кому-то еще.,
Что бы я не понял из вашего вопроса, вы хотите помахать одним и тем же аспектом в нескольких банках.
Так что есть 2 способа
- если вы используете затмение:
Затем создайте проект аспекта и перейдите к его свойствам> щелкните параметр построения аспекта на левой панели> выберите вкладку inpath на правой панели> теперь нажмите кнопку добавления внешних банок> добавьте банки, в которые хотите переместить аспект,> нажмите кнопку ОК
снова перейдите к его свойствам> щелкните по параметру сборки аспекта на левой панели> выберите вкладку "Выходной баночка" на правой панели> и дайте имя новому банку, который вы хотите создать..> Нажмите ОК.
создать и написать свой аспект и построить или очистить свой проект. Он сгенерирует jar в корневом каталоге проекта по имени, которое вы дали в "output jar", и этот jar будет иметь все jar, которые вы дали в inpath jar с аспектом waved., Это оно.,
Если вы используете команду 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
Я не уверен, что это ваша проблема, но это может все исправить.