Проблема с Jaxp? Не удается найти org.apache.xerces.jaxp.DocumentBuilderFactoryImpl с помощью gradle

#gradle #jaxp

#gradle #jaxp

Вопрос:

У меня возникли проблемы с загрузкой класса в скрипт gradle. Когда я запускаю этот код:

 buildscript {
    repositories {
       mavenCentral()
    }
    dependencies {
        classpath( group:"xerces", name:'xercesImpl', version:'2.9.1')
    }
}

task hello {
    doLast {
        println 'Hello world!'
        Class testClass = Class.forName("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl")
        assert testClass: "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found"
        println "found"
    }
}
  

Я получаю это, когда запускаю «gradle hello»:
java.lang.ClassNotFoundException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl»

Я подозреваю, что проблемы с реализацией Jaxp, но мало что знаю о том, как работает jaxp.

Спасибо за любую помощь

Ответ №1:

Будет ли достаточно чего-то подобного?

 import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl;

buildscript {
    repositories {
       mavenCentral()
    }

    dependencies {
        classpath group:"xerces", name:'xercesImpl', version:'2.9.1'
    }
}

task hello {
        println 'Hello world!'
        DocumentBuilderFactoryImpl obj = new DocumentBuilderFactoryImpl()
        // do something with obj
}
  

Ответ №2:

Попробуйте getClass().getClassLoader() вместо этого. Class.forName() вообще не следует использовать; у него известные проблемы при вызове из Java и он абсолютно ненадежен при вызове из Groovy (обычно вы получаете загрузчик классов библиотеки Groovy вместо загрузчика классов вызывающего).