У меня есть проект Spring Boot на основе Java, который использует PowerMock для имитации статических методов и вызовов конструктора, где это необходимо. После обновления до последней версии IntelliJ мне нужно использовать версию JDK выше, чем JDK 8. Я перешел на Amazon Coretto, так как хочу развернуть свое приложение на последней версии JDK поддержки на AWS Elastic Beanstalk. Когда я обновился и запустил тесты, я начал сталкиваться с проблемами После прохождения этой темы - https://github.com/java-decompiler/jd-gui/issues/187 и использования этого синтаксиса PowerMockIgnore
@PowerMockIgnore("javax.management.", "com.sun.org.apache.xerces.", "javax.xml.", "org.xml.", "org.w3c.dom.", "com.sun.org.apache.xalan.", "javax.activation.*", "javax.xml.transform.*", "com.sun.org.apache.xalan.*")
я получаю эту ошибку
java.lang.RuntimeException: java.lang.reflect.InaccessibleObjectException: Unable to make protected java.lang.Class jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.lang.String,boolean) throws java.lang.ClassNotFoundException accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @d5ce97f
at org.powermock.core.classloader.DeferSupportingClassLoader.findResource(DeferSupportingClassLoader.java:154)
at java.base/java.lang.ClassLoader.findResource(ClassLoader.java:1342)
at java.base/java.lang.Module.getResourceAsStream(Module.java:1575)
at kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins.BuiltInsResourceLoader.loadResource(BuiltInsResourceLoader.java:27)
at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClassFinder.findBuiltInsData(ReflectKotlinClassFinder.kt:52)
at kotlin.reflect.jvm.internal.impl.builtins.jvm.JvmBuiltInsPackageFragmentProvider.findPackage(JvmBuiltInsPackageFragmentProvider.kt:60)
Это поставило меня в тупик уже несколько дней. Может ли кто-нибудь предложить какие-либо дополнительные предложения о том, что я мог бы попробовать
С уважением Дэмиен
хороший вопрос - он предназначен для проверки
Вам не нужен *
в конце всех этих строк? Например, разве не должно быть javax.management.*
вместо javax.management.
?
К сожалению, я попробовал это и получил эту ошибку сейчас: java.lang.RuntimeException: java.lang.reflect.InaccessibleObjectException: невозможно сделать защищенный java.lang.Class jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.lang .String, boolean) выдает исключение java.lang.ClassNotFoundException, доступное: модуль java.base не «открывает jdk.internal.loader» для безымянного модуля @35088e87
единственный способ, которым кто-то может оказать вам надлежащую помощь, — это доказать минимальный воспроизводимый пример, например, проект github, который показывает вашу проблему. Тогда люди могут помочь намного больше, чем вы думаете.
Измените свою версию в Gradle:
testCompile('org.springframework.boot:spring-boot-starter-test') {
exclude group: "org.mockito", module: "mockito-core"
}
testCompile("org.mockito:mockito-core:2.23.4")
спасибо за ваш ответ, но это не сработало
Мне не удалось найти решение, позволяющее заставить PowerMock работать с Java 11, поэтому я удалил его из своего проекта.
Я хотел сказать, что если вы используете Spring, у вас есть: baeldung.com/spring-reflection-test-utils вы можете делать с этим все, что может powermock...
просто мысль, добавили ли вы <scope>test</scope> (или эквивалент gradle) к зависимости power mock? потому что он не должен загружаться при запуске кода