2016-11-15 7 views
0

Я изучаю aspectJ и встречал три вопроса. Зачем нужно добавлять все файлы jar в classpath, но не только aspectjrt.jar (если просто добавить один файл aspectjrt.jar, он выведет Could not find or load main class org.aspectj.tools.ajc.Main)? почему я уже определил основной класс и успешно скомпилировал ajc, а затем java packageName.MainClass error? Ошибка ниже:AspectJ Ошибка: Не удалось найти или загрузить основной класс aop.HelloTest

Error: Could not find or load main class aop.HelloTest 

Вот код:

package aop; 
public class HelloTest { 
    public static void main(String[] args) { 
     Hello hello = new Hello(); 
     hello.hello();// hello method just outout one word 
    } 
} 

//aspectj class which under the same aop package, attention these two file are not in the same file. 
public aspect AspectJTest { 
    before(): execution(* aop.*.*(..)){ 
     System.out.println("stimulate authority check"); 
     } 
} 

Вот мой рабочий процесс:

ajc -d . *.java 

java aop.HelloTest 
+0

'ява -cp aspectjrt.jar aop.HelloTest' может быть? –

+0

Введите 'echo $ CLASSPATH', выводящий такой файл jar в терминал, полностью верьте' cp' не сработает. – Crabime

ответ

1

Есть три банки в AspectJ:

  • aspectjrt - AspectJ runtime. Минимальный кусок, содержащий классы, обычно используемые сплетенным кодом. Вы должны запустить сплетенный код с этой банкой на пути к классу
  • aspectjweaver - ткач AspectJ. Должен использоваться при попытке ткачества.
  • aspectjtools - компилятор AspectJ. Если вы пытаетесь запустить ajc, вам нужно быть в вашем пути к классу.

Сценарий ajc, запускающий компилятор, поместит aspectjtools в путь к классам перед вызовом компилятора. Каждый бачок выше содержит содержимое более ранней банки (поэтому инструменты включают компилятор, ткач и время выполнения). Там нет «бегуна» сценария так, как Нандор упоминает вам необходимо убедиться, aspectjrt.jar находится на пути к классам перед запуском кода, либо с помощью его включения в момент запуска:

java -cp aspectjrt.jar:. aop.HelloTest

или установить путь к классам перед вызовом это:

export CLASSPATH=<ASPECTJHOME>/lib/aspectjrt.jar:.

java aop.HelloTest

+0

Спасибо, Энди, мой вопрос разрешен в вашей инструкции по деталям. Но здесь у меня все еще есть одно место, не понимающее, почему '-cp aspectj.jar: .'? какова цель последней точки. – Crabime

+0

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