Класс javax.annotation.PreDestroy не найден в lenskit и jdk 10 - PullRequest
0 голосов
/ 29 августа 2018

Я работаю с lenskit и получаю эту ошибку

Exception in thread "main" java.lang.NoClassDefFoundError: javax/annotation/PreDestroy
    at org.grouplens.grapht.LifecycleManager.registerComponent(LifecycleManager.java:52)
    at org.grouplens.grapht.reflect.internal.ClassInstantiator.instantiate(ClassInstantiator.java:140)
    at org.grouplens.grapht.Instantiators$ProviderInstantiator.instantiate(Instantiators.java:148)
    at org.grouplens.grapht.Instantiators$MemoizingInstantiator.instantiate(Instantiators.java:184)
    at org.lenskit.inject.NodeInstantiator$DefaultImpl.instantiate(NodeInstantiator.java:91)
    at org.lenskit.inject.NodeInstantiator.apply(NodeInstantiator.java:70)
    at org.lenskit.inject.NodeInstantiator$DefaultImpl.apply(NodeInstantiator.java:82)
    at org.lenskit.inject.InstantiatingNodeProcessor.processNode(InstantiatingNodeProcessor.java:54)
    at org.lenskit.inject.NodeProcessors.processNodes(NodeProcessors.java:92)
    at org.lenskit.inject.RecommenderInstantiator.replaceShareableNodes(RecommenderInstantiator.java:113)
    at org.lenskit.inject.RecommenderInstantiator.instantiate(RecommenderInstantiator.java:82)
    at org.lenskit.LenskitRecommenderEngineBuilder.build(LenskitRecommenderEngineBuilder.java:144)
    at org.lenskit.LenskitRecommenderEngineBuilder.build(LenskitRecommenderEngineBuilder.java:112)
    at org.lenskit.cli.util.RecommenderLoader.loadEngine(RecommenderLoader.java:87)
    at org.lenskit.cli.commands.GlobalRecommend.execute(GlobalRecommend.java:72)
    at org.lenskit.cli.Main.main(Main.java:73)
Caused by: java.lang.ClassNotFoundException: javax.annotation.PreDestroy
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    ... 16 more

В нем говорится, что класс аннотации. PreDestroy не найден. Но в моей внешней библиотеке есть библиотека java.xml.ws.annotation, которая включает в себя файл javax.annotation.

Место, которое он назвал, находится здесь.

    /**
 * Register a component with the lifecycle manager.  The component will be torn down when the lifecycle manager
 * is closed, using whatever teardown the lifecycle manager institutes.
 *
 * @param instance The component to register.
 */
public void registerComponent(Object instance) {
    if (instance == null) {
        return;
    }

    if (instance instanceof AutoCloseable) {
        actions.add(new CloseAction((AutoCloseable) instance));
    }
    for (Method m: MethodUtils.getMethodsListWithAnnotation(instance.getClass(), PreDestroy.class)) {
        actions.add(new PreDestroyAction(instance, m));
    }
}

В настоящее время я использую intellij, и я попытался импортировать файл javax.annotation jar , но он не работал. Я также пытался поставить этот код

dependencies {
compileOnly group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.0'
compile group: 'org.jetbrains', name: 'annotations', version: '15.0'

}

но все равно не сработало.

1 Ответ

0 голосов
/ 21 мая 2019

Глядя на источник lenskit на GitHub, он объявляет sourceCompatibility = '1.7' в build, gradle . Понижение JDK до 8 или 7 должно решить проблему. поскольку javax.annotations.PreDestroy, по-видимому, был удален / обновлен в JDK 9 и более поздних версиях.

Помимо этого, могут быть другие проблемы совместимости с более поздней версией JDK из-за упомянутой выше совместимости с исходным кодом проекта.

...