2012-06-04 69 views
12

Tôi đang tạo một công cụ sẽ ghi các tệp .java, sau đó (hy vọng) biên dịch các tệp đó thành tệp .class. Tất cả trong một quá trình, người dùng chọn một thư mục tệp nơi nhiều tệp .java được viết. Bây giờ tôi muốn chương trình biên dịch các tệp Java này.Biên dịch các tệp .java bên ngoài từ trong Java

Trả lời

14

JavaCompiler là bạn của bạn. Kiểm tra tài liệu here

Và đây là một ví dụ về cách bạn có thể sử dụng trình biên dịch API

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>(); 
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); 
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList("YouFileToCompile.java")); 
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, 
     null, compilationUnits); 
boolean success = task.call(); 
fileManager.close(); 
+0

Tôi đã thử điều này và thay thế "YouFileToCompile.java" bằng đường dẫn tuyệt đối (vấn đề?) Bây giờ tôi nhận được NullPointerException tại: StandardJavaFileManager fileManager = compiler.getStandardFileManager (chẩn đoán, null, null); –

+0

Âm thanh như biến 'trình biên dịch' là' null'. Đảm bảo bạn có cài đặt Java chính xác. Kiểm tra điều này để được trợ giúp http://www.java.net/node/688208 – GETah

+0

Tệp này có phải là tệp .java không? Nếu tôi có mã trong một tập tin .txt, nó sẽ vẫn hoạt động? – JD9999

4

Các JavaCompiler sẽ null nếu mã đang chạy từ một JRE. Nó cần một JDK, bao gồm tools.jar.

Các vấn đề liên quan