Получить аннотированные методы с пользовательским плагином Gradle - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь создать собственный плагин Gradle, который читает все классы на основе аннотации. Мой urlclassloader работает, основываясь на базовом пакете, который я предоставляю вместе с плагином, но когда я использую функцию getMethods (), я получаю ClassNotFoundException.

Это связано с тем, что некоторые методы имеют параметры, которые находятся в сторонних зависимостях. Есть ли способ использовать все зависимости проекта, который использует плагин? Я хочу десериализовать их, используя объект-маппер.

Мой код:

@TaskAction
public void generateRaml() throws MalformedURLException, ClassNotFoundException {
    SourceSetContainer ssc = getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();

    File classesDir = ssc.getByName("main").getOutput().getClassesDirs().getSingleFile();

    URL[] urls = new URL[] { classesDir.toURI().toURL() };

    ClassLoader classLoader = new URLClassLoader(urls, null);

    ResourceLoader resourceLoader = new DefaultResourceLoader(classLoader);

    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
    provider.setResourceLoader(resourceLoader);

    provider.addIncludeFilter(new AnnotationTypeFilter(Controller.class));
    provider.addIncludeFilter(new AnnotationTypeFilter(RestController.class));

    Set<BeanDefinition> components = provider.findCandidateComponents(getBasePackage());

    System.out.println("Found " + components.size() + " components");

    for (BeanDefinition component : components) {
        System.out.println("Component " + component.getBeanClassName());

       Class<?> componentClass = Class.forName(component.getBeanClassName(), false, classLoader);

       System.out.println("Class: " + componentClass.getName());
       Method[] methods = componentClass.getDeclaredMethods();

       System.out.println("Methods: " +  methods.length);
    }

Плагины не работают, когда я использую "componentClass.getDeclaredMethods ()"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...