注解处理时如何获取编译类路径?
How to obtain compilation classpath during annotation processing?
我的尝试是
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] currentClassPath = ((URLClassLoader) cl).getURLs();
String[] classPathStrings = Arrays.stream(currentClassPath).map(url -> {
try {
return Paths.get(url.toURI()).toAbsolutePath().toString();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}).toArray(String[]::new);
System.out.println(Arrays.asList(classPathStrings));
在注释处理器的 process()
方法体中。但它只输出
[C:\Program Files\Maven\boot\plexus-classworlds-2.5.1.jar]
而不是处理项目的依赖项。
嗯,用getClass().getClassLoader()
就够了。 getClass()
在注释处理器上下文中。
我认为在 annotation-processing 期间加载项目 类 不是一个好主意。请记住,创建 类 是您正在做的事情。所以可能是类不可用或者使用 class-laoder 会减慢编译过程
我的尝试是
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] currentClassPath = ((URLClassLoader) cl).getURLs();
String[] classPathStrings = Arrays.stream(currentClassPath).map(url -> {
try {
return Paths.get(url.toURI()).toAbsolutePath().toString();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}).toArray(String[]::new);
System.out.println(Arrays.asList(classPathStrings));
在注释处理器的 process()
方法体中。但它只输出
[C:\Program Files\Maven\boot\plexus-classworlds-2.5.1.jar]
而不是处理项目的依赖项。
嗯,用getClass().getClassLoader()
就够了。 getClass()
在注释处理器上下文中。
我认为在 annotation-processing 期间加载项目 类 不是一个好主意。请记住,创建 类 是您正在做的事情。所以可能是类不可用或者使用 class-laoder 会减慢编译过程