java.lang.LinkageError при сборке проекта в Gradle

Проект с рефлексией. Все классы проходят тесты. Аналогичный упрощенный проект тоже работает без сборщика. Как только переношу в Gradle - выдает ошибку LinkageError. Ниже код.

Точка входа:

public class Main {

private final ClassA a;
private final ClassB b;
private final ClassC c;

public Main(ClassA a, ClassB b, ClassC c) {
    this.a = a;
    this.b = b;
    this.c = c;
}

public static void main(String[] args) {
    MainCreator mainCreator = new MainCreator();
    Main main = mainCreator.create();
    main.run();
}

private void run(){
    System.out.println("Run");
    System.out.println("a = " + a.getClass());
    System.out.println("b = " + b.getClass());
    System.out.println("c = " + c.getClass());
}

}

Создатель мейна:

public class MainCreator {

    Main create() {
    try {
        return (Main) getNewInstance();
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
        e.printStackTrace();
    }
    return null;
}

private Object getNewInstance()
        throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    Class<Main> clazz = Main.class;
    Constructor<?> constructor = clazz.getDeclaredConstructors()[0];
    Class<?>[] params = constructor.getParameterTypes();
    Object[] args = new Object[constructor.getParameterCount()];
    for (int i = 0; i < args.length; i++) {
        args[i] = params[i].getDeclaredConstructor().newInstance();
    }
    return clazz.getDeclaredConstructors()[0].newInstance(args);
}

}

Вроде простой пример на Reflection. Он работает. А с Gradle в строке:

Class<Main> clazz = Main.class;

бросает ошибку:

Exception in thread "main" java.lang.LinkageError: loader constraint violation: loader 'app' wants to load class org.geekhub.studentsregistry.students.StudentsRegistry. A different class with the same name was previously loaded by com.sun.tools.javac.launcher.Main$MemoryClassLoader @68e5eea7. (org.geekhub.studentsregistry.students.StudentsRegistry is in unnamed module of loader com.sun.tools.javac.launcher.Main$MemoryClassLoader @68e5eea7, parent loader 'app')
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at org.geekhub.studentsregistry.students.StudentsRegistryCreator2.getNewInstance(StudentsRegistryCreator2.java:21)
at org.geekhub.studentsregistry.students.StudentsRegistryCreator2.create(StudentsRegistryCreator2.java:11)
at org.geekhub.studentsregistry.students.StudentsRegistry.main(StudentsRegistry.java:60)

Тут вместо класса Main - StudentsRegistry. Уже и разные ClassLoader пробовал, ничего не помогает. За любую помощь благодарен.


Ответы (0 шт):