为什么不编译? (JavaCompiler 工作正常,但表示需要请求注解处理)
Why doesn't this compile? (JavaCompiler works fine, but says annotation processing needs to be requested)
这是错误;
错误:Class 名称 'Hello.java' 仅在明确请求注释处理时才被接受 1 个错误
这是JavaCompiler代码;
public static void main(String[] args) {
PrintWriter writer = new PrintWriter( System.out);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager( null, null, null);
ArrayList<String> classes = new ArrayList<>();
classes.add( "Hello.java");
JavaCompiler.CompilationTask task = compiler.getTask( writer, fileManager, null, null, classes, null);
task.call();
}
这是你好class;
public class Hello {
public static void main(String[] args) {
System.out.println( "Hi");
}
}
我知道这个问题被问了将近一百万次,但所有答案都是这个 = "You forgot to add .java at the end of your class name",但我做到了,如您所见。为什么这不起作用?使用 JavaCompiler 时有什么不同吗?我在构造函数中的参数是否错误?感谢您的帮助。
您误用了编译器对象:
- 类参数用于传递注解
- CompilationUnits 参数是您应该使用的参数
你应该这样称呼它(注意:你必须提供有效的文件路径):
PrintWriter writer = new PrintWriter(System.out);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> units =
fileManager.getJavaFileObjectsFromFiles(
Arrays.asList(new File("Hello.java"))); // put absolute path here
JavaCompiler.CompilationTask task = compiler.getTask(
writer, fileManager, null, null, null, units); // provide units, not classes
task.call();
fileManager.close();
这是错误;
错误:Class 名称 'Hello.java' 仅在明确请求注释处理时才被接受 1 个错误
这是JavaCompiler代码;
public static void main(String[] args) {
PrintWriter writer = new PrintWriter( System.out);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager( null, null, null);
ArrayList<String> classes = new ArrayList<>();
classes.add( "Hello.java");
JavaCompiler.CompilationTask task = compiler.getTask( writer, fileManager, null, null, classes, null);
task.call();
}
这是你好class;
public class Hello {
public static void main(String[] args) {
System.out.println( "Hi");
}
}
我知道这个问题被问了将近一百万次,但所有答案都是这个 = "You forgot to add .java at the end of your class name",但我做到了,如您所见。为什么这不起作用?使用 JavaCompiler 时有什么不同吗?我在构造函数中的参数是否错误?感谢您的帮助。
您误用了编译器对象:
- 类参数用于传递注解
- CompilationUnits 参数是您应该使用的参数
你应该这样称呼它(注意:你必须提供有效的文件路径):
PrintWriter writer = new PrintWriter(System.out);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> units =
fileManager.getJavaFileObjectsFromFiles(
Arrays.asList(new File("Hello.java"))); // put absolute path here
JavaCompiler.CompilationTask task = compiler.getTask(
writer, fileManager, null, null, null, units); // provide units, not classes
task.call();
fileManager.close();