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 пробовал, ничего не помогает. За любую помощь благодарен.