Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lenskit和jdk 10中未找到javax.annotation.PreDestroy类_Java_Gradle_Intellij Idea_Annotations_Classnotfoundexception - Fatal编程技术网

lenskit和jdk 10中未找到javax.annotation.PreDestroy类

lenskit和jdk 10中未找到javax.annotation.PreDestroy类,java,gradle,intellij-idea,annotations,classnotfoundexception,Java,Gradle,Intellij Idea,Annotations,Classnotfoundexception,我正在与lenskit合作,我收到了这个错误 线程“main”java.lang.NoClassDefFoundError中的异常:javax/annotation/PreDestroy 在org.grouplens.grapht.LifecycleManager.registerComponent(LifecycleManager.java:52)上 位于org.grouplens.grapht.reflect.internal.ClassInstallator.instantiate(Cla

我正在与lenskit合作,我收到了这个错误

线程“main”java.lang.NoClassDefFoundError中的异常:javax/annotation/PreDestroy 在org.grouplens.grapht.LifecycleManager.registerComponent(LifecycleManager.java:52)上 位于org.grouplens.grapht.reflect.internal.ClassInstallator.instantiate(ClassInstallator.java:140) 位于org.grouplens.grapht.Instantiators$ProviderInstantiator.instantiate(Instantiators.java:148) 位于org.grouplens.grapht.Instantiators$MemoizingInstantiator.instantiate(Instantiators.java:184) 在org.lenskit.inject.nodeInstallator$DefaultImpl.instantiate(nodeInstallator.java:91)上 在org.lenskit.inject.nodeInstallator.apply上(nodeInstallator.java:70) 在org.lenskit.inject.nodeInstallator$DefaultImpl.apply(nodeInstallator.java:82)上 位于org.lenskit.inject.instantingNodeProcessor.processNode(instantingNodeProcessor.java:54) 位于org.lenskit.inject.NodeProcessors.processNodes(NodeProcessors.java:92) 位于org.lenskit.inject.RecommenderInstantiator.replaceSharableNodes(RecommenderInstantiator.java:113) 位于org.lenskit.inject.RecommenderInstantiator.instantiate(RecommenderInstantiator.java:82) 在org.lenskit.lenskitrecommitderenginebuilder.build上(lenskitrecommitderenginebuilder.java:144) 在org.lenskit.lenskitrecommitderenginebuilder.build上(lenskitrecommitderenginebuilder.java:112) 位于org.lenskit.cli.util.RecommenderLoader.loadEngine(RecommenderLoader.java:87) 在org.lenskit.cli.commands.globalrecomment.execute上(globalrecomment.java:72) 位于org.lenskit.cli.Main.Main(Main.java:73) 原因:java.lang.ClassNotFoundException:javax.annotation.PreDestroy 位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) 位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) 位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ... 还有16个 它说找不到annotation.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,我已经尝试导入,但没有成功。我也试着把这个代码

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


但它仍然不起作用。

查看GitHub上的lenskit源代码,它在中声明了
sourceCompatibility='1.7'
。 将JDK降级到8或7应该可以解决问题。自从javax.annotations.PreDestroy在JDK 9和更高版本中被删除/更新以来


除此之外,由于上述项目的源代码兼容性,JDK更高版本可能存在其他兼容性问题。

你到底为什么要降级。。。这些类已经被移动到外部库中,因为它们不再是核心JDK的一部分。请包含相应的依赖项。@M.Deinum正在讨论的项目在build.gradle中指定sourceCompatibility='1.7'。使用早期版本的JDK来避免其他兼容性问题不是更好吗。在这个问题中,没有任何关于sourceCompatibility的概念。问题是关于lenskit(“我正在与lenskit合作,我收到了这个错误”)。lenskit是一个开源项目,它包含build.gradle文件,该文件指定sourceCompatibility='1.7'。请看这里:我将更新我的答案以更明确地强调这一点。除非我认为lenskit的用户遗漏了一些东西,否则最好使用JDK7或8,至少在lenskit更新到与更新的JDK兼容之前是这样。源代码兼容性与目标兼容性无关。问题与镜头套件无关(至少与错误无关)。