Tôi sử dụng lớp javax.tools.JavaCompiler
(jdk6) để biên dịch tệp nguồn, nhưng tệp nguồn phụ thuộc vào tệp jar nào đó. Làm thế nào để thiết lập classpath của javax.tools.JavaCompiler
?Làm thế nào để thiết lập classpath khi tôi sử dụng javax.tools.JavaCompiler biên dịch mã nguồn?
Trả lời
Phương pháp javax.tools.JavaCompiler#getTask() có tham số options
cho phép đặt tùy chọn trình biên dịch. sau message mô tả một cách dễ dàng để thiết lập chúng để truy cập vào classpath chương trình gọi điện thoại của:
Bạn cần phải cấu hình quản lý tập tin tiêu chuẩn java để biết về file jar (s) - bạn sử dụng trình biên dịch đối số tùy chọn để thực hiện điều đó.
Theo mặc định, java biên dịch đối tượng dường như chỉ biết về mặc định địa điểm cho bootclasspath, extdirs và endorseddirs thư mục về của classpath của nó.
Bạn cần phải thêm classpath hiện chương trình gọi điện thoại để trình biên dịch java sơ thẩm mà được thông qua trên trình quản lý file tiêu chuẩn, mà sẽ sau đó tìm các lớp học trong các tập tin jar.
Đây là cách tôi làm điều đó trong the compiler wrapper I wrote
List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
Tất cả các bạn sẽ cần sau đó là để có được các thiết lập classpath thích hợp khi chạy chương trình gọi điện thoại.
Cùng một vấn đề xảy ra với tôi gần đây, cuối cùng tôi đã tìm thấy hai cách giải quyết. Bạn có thể thiết lập các đường dẫn lớp bằng cách gọi StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") hoặc Compiler.getTask (ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, cũng giống như câu trả lời đầu tiên được đăng ở đây nói.
Để làm việc này tôi cần làm 'StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, Arrays.asList (tệp mới (classpath)));' –
Satheesh gửi đây là một câu trả lời, "Bạn có thể chia sẻ trình biên dịch của bạn (liên kết không hoạt động) cảm ơn trước." –
cảm ơn một nhà máy cho bài đăng này, tôi đã đấu tranh với điều này cho lứa tuổi và đây là câu trả lời ... :) – flexinIT
BTW, 'classpath' tùy chọn của' JavaCompiler' không "hiểu" ký tự đại diện. Vì vậy, mỗi 'jar' bạn phải thêm trực tiếp vào chuỗi này. – Andremoniy