2013-05-10 55 views
1

我正在研究在JBoss服務器上部署企業檔案(耳)需要動態編譯(和運行)類的項目。我正在使用JavaCompiler類來執行此操作 - 複雜性來自正在編譯的類引用包含在ejb jar中的某些類的引用。將JavaCompiler與類路徑一起引用耳內的罐子

當部署的耳朵在部署時「爆炸」時,這不是問題,所以它只是一個目錄而不是存檔 - 在這種情況下,我可以在編譯器的-classpath選項中指定所需的jar ,編譯工作正常。不幸的是,由於我正在使用的系統的限制,部署這些耳朵'爆炸'並不是一個可接受的解決方案,編譯器似乎無法在歸檔中查看所需的jar。

鑑於動態編譯是從有問題的耳朵進行的,因此係統的類加載器可以訪問所需jar的內容,有什麼方法可以告訴編譯器只使用加載的類由系統類加載器?

我很欣賞這是一個羅嗦的問題,但任何幫助將不勝感激。

感謝

回答

1

看來,有沒有簡單的方法有編譯代碼的JavaCompiler負荷依賴從ClassLoader。但是,可以直接實施JavaFileManager並使用上下文ClassLoadergetResource(<class/resource name>))上的資源查找重定向StandardLocation.CLASS_PATH的操作。這將撤銷直接在File上操作的StandardJavaFileManager的限制。

有人已經似乎已經prototypically實施了計算策略: http://atamur.blogspot.de/2009/10/using-built-in-javacompiler-with-custom.html