因爲一個Java文件可以編譯成任意數量的類文件,有沒有一些方法可以從編譯器API中找出哪些類文件已經生成?它輸出到一個可能有其他文件的目錄,所以我不能只看這個。使用Java編譯器API,創建了哪些類?
1
A
回答
3
我想出了一些似乎可行的東西。 * FileManager有回調來獲取事物的位置,包括輸出的東西。您可以使用ForwardingJavaFileManager對其進行包裝,覆蓋並存儲來自呼叫的值。
final List<String> classFiles = new ArrayList<>();
StandardJavaFileManager inner = compiler.getStandardFileManager(null, null, null);
JavaFileManager fileManager = new ForwardingJavaFileManager(inner) {
@Override
public JavaFileObject getJavaFileForOutput(Location location, String className,
JavaFileObject.Kind kind, FileObject sibling) throws IOException {
JavaFileObject o = super.getJavaFileForOutput(location, className, kind, sibling);
classFiles.add(o.getName());
return o;
}
};
+0
+1酷 - 它的工作原理:-) –
0
javax.tools包顯示了幾種管理編譯單元的方法。
0
我不認爲我們可以發現通過使用任何給定的引用的Java編譯器API創建的非公共類。您需要解析(或應用reg表達式)輸入java文件以標識可用的類名稱。一旦你獲得了類的名字,你應該能夠使用自定義類加載器加載它們。
Satheesh
相關問題
- 1. Eclipse JDT編譯器可以增量編譯Java Source並通知編譯了哪些類?
- 2. 哪個編譯器做了macport使用?
- 3. Java編譯器API類加載器
- 4. NetBeans使用哪種Java編譯器?
- 5. 使用Java編譯器API來編譯多個java文件
- 6. 檢測使用預編譯器宏編譯了哪個目標
- 7. 瞭解Java編譯器
- 8. 使用編譯器API編譯Java項目
- 9. Java編譯器不創建.jar文件
- 10. Javassist Vs. Java編譯器API
- 11. 限制Java編譯器API
- 12. C編譯程序使用哪些段?
- 13. 創建(使用MSVC編譯器)
- 14. 無法看到編譯器如何使用他創建了類爲我關閉
- 15. C#編譯器創建ref類
- 16. 編譯Eclipse java applet和android項目時使用哪些文件?
- 17. 哪些編譯器支持Haskell FFI
- 18. 應關閉哪些編譯器警告?
- 19. 誰在java中創建類文件JVM或編譯器?
- 20. C++創建和編譯類
- 21. 使用Visual C++創建了哪些常見的應用程序類型?
- 22. 哪些Eiffel編譯器使用Earley解析
- 23. 使用Mathematica瞭解編譯器優化:訪問使用SetDelayed創建的定義?
- 24. 哪個Flash SWF編譯器使用編譯器指令?
- 25. java限制某些類的反編譯
- 26. 哪些Windows編譯器支持<future>類
- 27. Android使用哪些API創建聊天頭?
- 28. 我在Eclipse中使用了哪些JSON編輯器?
- 29. 確定哪個編譯器構建了我的LAPACK
- 30. Eclipse:使用Java類編譯AspectJ類
@Nambari:你可以在一個java文件中定義多個類,但只有一個可以是公共的。 – leonbloy
@Nambari,在一個Java文件的頂層可以有多個java類。唯一的限制是,它們中的至多一個可以是公共的,並且它必須具有與文件名稱相同的名稱。 –
是的,正確的。我同意。 – kosa