本文介紹了搞不懂AJC與javac的工作方式的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有點搞不懂AspectJ編譯器ajc
的工作原理。據我所知,在談到CTW時,AJC用于將方面編織到編譯后的字節代碼中–即.class文件。
但是,當我查看AspectJ的maven-plugin(aspectj-maven-plugin
)時,發現它是在maven的generate-sources
階段運行的,在javac編譯器之前。這將意味著編譯器在方面編織之后運行。這是有意義的,因為您可以編織ITD、修改類成員等,Java編譯器需要知道這些才能編譯任何依賴類。
因此,如果是這種情況,并且ajc
在javac之前運行,我假設ajc
必須首先將所有Java代碼編譯成字節碼才能在任何方面進行編織。
所以問題是,如果ajc
已經完成了將所有Java代碼編譯成字節碼的工作,為什么還要運行javac呢?為什么ajc
不是唯一需要的編譯器?讓兩個人同時參選難道不是重復了努力嗎?另外,javac
如何處理ajc
已經編譯的類?它是否只是忽略它們,因為自生成.class文件以來,源文件中沒有任何更改?
推薦答案
ajc可以編譯所有類,它構建在eclipse Java編譯器上。AJC是生成類所需的唯一編譯器。
就重復的工作而言,javac很可能不會覆蓋時間戳比源Java文件更新的.class文件。您還可以想象構建時,一些源代碼是用AJC編譯的,而另一些則是用javac編譯的。
至于maven計劃,我不知道。
這篇關于搞不懂AJC與javac的工作方式的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,