2016-11-15 245 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錯誤?錯誤如下: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

'java命令aspectjrt.jar aop.HelloTest'可能? –

+0

在終端輸入'echo $ CLASSPATH'輸出這樣的jar文件,完全相信'cp'不會讓我失望。 – Crabime

回答

1

有三個罐子在AspectJ:

  • aspectjrt - 中AspectJ運行時。包含通常由機織代碼使用的類的最小jar。您應該在類路徑上使用此jar運行編織代碼
  • aspectjweaver - AspectJ weaver。如果嘗試加載時編織,應該使用。
  • aspectjtools - AspectJ編譯器。如果試圖運行ajc,需要在你的classpath上。

啓動編譯器的腳本ajc將在調用編譯器之前在類路徑中放置aspectjtools。上面的每個jar包含早期jar的內容(所以工具包括編譯器,編織器和運行時)。有沒有「亞軍」的腳本,從而Nandor提到你需要確保aspectjrt.jar是在類路徑中運行代碼之前,無論是通過包括它在啓動時:

java -cp aspectjrt.jar:. aop.HelloTest

或調用之前設置CLASSPATH它:

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

java aop.HelloTest

+0

謝謝安迪,我的問題通過您的詳細說明解決。但在這裏我仍然有一個地方不明白,爲什麼'-cp aspectj.jar:.'?最後一點的目的是什麼? – Crabime

+0

它確保當前目錄位於類路徑中。在上面的情況下可能沒有必要,因爲沒有什麼可以解決的。 –

相關問題