Trường hợp sử dụng của tôi là biên dịch các tệp nguồn được tạo từ một chương trình java bằng cách sử dụng các lớp ToolProvider và JavaCompiler được cung cấp trong JDK 6. Tệp nguồn chứa tham chiếu đến các lớp trong trình nạp lớp ngữ cảnh (nó chạy trong một thùng chứa J2EE), nhưng không có trong hệ thống bộ nạp lớp. Sự hiểu biết của tôi là theo mặc định ToolProvider sẽ tạo ra cá thể JavaCompiler với trình nạp lớp hệ thống.Làm cách nào để sử dụng JDK6 ToolProvider và JavaCompiler với trình nạp lớp ngữ cảnh?
Có cách nào để chỉ định trình nạp lớp cho JavaCompiler để sử dụng không?
tôi đã cố gắng tiếp cận này, biến đổi từ một cái gì đó trên IBM developerWorks:
FileManagerImpl fm =
new FileManagerImpl(compiler.getStandardFileManager(null, null, null););
với FileManagerImpl định nghĩa là:
static final class FileManagerImpl
extends ForwardingJavaFileManager<JavaFileManager> {
public FileManagerImpl(JavaFileManager fileManager) {
super(fileManager);
}
@Override
public ClassLoader getClassLoader(JavaFileManager.Location location) {
new Exception().printStackTrace();
return Thread.currentThread().getContextClassLoader();
}
}
Các stacktrace chỉ ra nó chỉ được gọi là một lần trong quá trình chú thích. Tôi đã xác minh lớp được tham chiếu trong tệp nguồn được biên dịch không nằm trên đường dẫn lớp hệ thống nhưng có sẵn từ trình nạp lớp ngữ cảnh.
Dường như JCI không cho phép bạn chuyển bộ nạp lớp vào, chỉ đường dẫn, giống như hỗ trợ JDK6 cho phép. – Phil
Bạn đang tìm kiếm ở đâu? Chắc chắn rồi. – tcurdt