Как получить classpath компиляции во время обработки аннотации?

Моя попытка была

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]

Вместо зависимостей обрабатываемого проекта.

1 ответ

Решение

Ну, достаточно использовать getClass().getClassLoader(), getClass() в контексте процессора аннотаций.

I think to load project classes during annotation-processing is not a good idea. Have in mind that creating classes is what you ar doing. So may be the classses are not available or using the class-laoder will slow down the compilation process

Другие вопросы по тегам