2011-04-01 91 views
4

我無法理解AspectJ的編譯時和加載時編織和搞清楚使用什麼(以及如何使用AJC)編譯並生成我的項目。AspectJ的 - 編譯時間與加載時編織

這裏是我的項目結構: -

  • TestProject:Java服務庫。 其他一些 項目正在使用此項目。此項目不包含任何方面的 。

  • TestProject-方面:只包含
    方面,其建議在 TestProject幾類。我沒有使用
    AspectJ5註釋風格和我所有的 joinpoints只是在方法
    執行當前。

我的問題:

  • AJC VS iajc以及他們如何 不同?
  • 是否有任何需要編織?

  • 請問像這樣的工作?

編譯TestProject-方面

<iajc> 
    sourceroots=${sources.dir} 
    destdir=${classes.dir} 
    classpath=${standard.compile.classpath} 
</iajc> 

編譯TestProject

<iajc> 
    sourceroots=${sources.dir} 
    destdir=${classes.dir} 
    classpath=${standard.compile.classpath} 
    inpath=${[TestProject-Aspects]pkg.classpath} 
</iajc> 
  • 不要我必須使用javac呢? 我最初使用編譯 TestProject?

回答

5

ajc和iajc是Eclipse自帶的JDT編譯器的擴展。因此,ajc和iajc將爲Eclipse提供完全相同的純Java字節代碼(其中包含Oracle的javac的一些細微差異)。除了iajc是增量式(即iajc中的i),ajc和iajc基本相同。這意味着編譯器會檢查時間戳並儘可能做更智能的增量構建,並避免完整構建(就像在Eclipse中使用AJDT時一樣)。除此功能外,它們基本上是相同的。在這裏看到更多的信息:

http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html

如果項目不包含任何方面,採用AJC編譯器是可選的。這些項目可以在包含方面的項目的路徑中。要編譯包含代碼風格的方面,那麼你需要使用ajc。

註釋風格方面略有不同。如果僅爲LTW使用註釋樣式,那麼只要正確的aop.xml被創建,weaver在運行時就可用,那麼您可以使用javac來編譯它們。

但是,使用CTW編織的註記風格確實需要ajc。

在上面的特定情況下,只要它位於方面項目的入口處,就可以使用javac編譯TestProject。這意味着您的TestProject的類文件將被重寫並與您的方面項目中的類文件結合使用。或者,如果您使用的是LTW,那麼您不需要將TestProject添加到任何inpath,並且您可以使用javac。但是,您必須在運行時爲LTW設置您的應用程序。


編輯

要回答以下的評論:

是。您可以先使用ajc或iajc任務編譯您的方面項目。然後,您可以使用iajc任務編譯第二個純Java項目,並將第一個項目的結果放在縱橫比路徑上。你完全不能使用javac。

螞蟻的build.xml片斷會是這個樣子:

<project name="simple-example" default="compile" > 
    <taskdef 
     resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> 
    <classpath> 
     <pathelement location="${home.dir}/tools/aspectj/lib/aspectjtools.jar"/> 
    </classpath> 
    </taskdef> 

    <target name="compile" > 
    <iajc sourceroots="${home.dir}/TestProject-Aspects/src" 
     classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" 
     destDir="${home.dir}/TestProject-Aspects/bin"/> 
    <iajc sourceroots="${home.dir}/TestProject/src" 
     classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" 
     destDir="${home.dir}/TestProject/bin" 
     aspectPath="${home.dir}/TestProject-Aspects/bin"/> 
    </target> 
</project> 

在這裏看到更多的細節上iajc

http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html

+0

您好安德魯,我想先編譯我的TestProject - 方面並使用它的編譯輸出來編譯和構建我的TestProject。你能告訴我在這種情況下build.xml的樣子嗎?我可以使用javac編譯我的ajc編譯的TestProject-Aspects和TestProject嗎?謝謝。 – soontobeared 2011-04-05 04:28:28

+0

謝謝。有用 – soontobeared 2011-04-19 17:50:35

相關問題