如何解决 java.lang.NoClassDefFoundError: javax/annotation/Generated?
Posted
技术标签:
【中文标题】如何解决 java.lang.NoClassDefFoundError: javax/annotation/Generated?【英文标题】:How can be solved java.lang.NoClassDefFoundError: javax/annotation/Generated? 【发布时间】:2018-06-22 14:37:59 【问题描述】:我已经在我的项目中将 jdk 更改为 9 版本,然后发生错误:
Error:java: java.lang.NoClassDefFoundError: javax/annotation/Generated
我尝试通过将以下内容添加到 pom.com 来解决它,但它对我不起作用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>$version.compiler.plugin</version>
<configuration>
<!-- fork is needed so compiler args can be used -->
<fork>true</fork>
<compilerArgs>
<arg>-J--add-modules</arg>
<arg>-Jjava.annotations.common</arg>
</compilerArgs>
</configuration>
</plugin>
还有其他办法解决吗?
【问题讨论】:
【参考方案1】:implementation 'javax.annotation:javax.annotation-api:1.3.2'
annotationProcessor("javax.annotation:javax.annotation-api:1.3.2")
【讨论】:
请在您的答案中包含更多详细信息,而不仅仅是代码。谢谢! 我用的是android Studio,将这个添加到项目根目录下的build.gradle中。实现 'javax.annotation:javax.annotation-api:1.3.2' annotationProcessor("javax.annotation:javax.annotation-api:1.3.2") 像魅力一样工作【参考方案2】:也许为时已晚,但我也遇到了同样的问题,但其他答案都对我不起作用,因为我正在运行一个 Android 项目,并且它已经在 build.gradle 应用程序文件中有这个。
实现'javax.annotation:javax.annotation-api:1.3.2'
经过几个小时的研究,我找到了解决办法,就是在上面一行下面加上一行:
annotationProcessor("javax.annotation:javax.annotation-api:1.3.2")
希望这会有所帮助。
【讨论】:
【参考方案3】:我也面临同样的问题。 我在 bash_profile 中使用 java8 时,版本是 java 11。将其更改为 java 8 有效。 另外,我在虚拟项目中测试了该问题(当不是版本问题时)已使用 javax.annotation-api-1.3.2 解决。
【讨论】:
【参考方案4】:从 2020 年起,javax.* 模块已转移到 jakarta。 所以2020+证明依赖声明现在是:
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
另请参阅a blog with explanations 和 a complete table with old and new names
【讨论】:
【参考方案5】:将包含您需要的类的工件添加到类路径中。
看来您需要 javax.annotation API。有关详细信息,请参阅https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2。您可以像任何其他一样将以下依赖项添加到您的项目中,并且它应该存在:
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
记得删除编译器参数!
【讨论】:
非常感谢!它的工作。当解决方案如此简单时,我试图找到相同的东西几个小时。 基本觉得jre变小了,javax.*里面的东西都需要自己带 有一个 Java 10 模块包含包 javax.annotation.processing:--add-modules java.compiler
。是的,用 javax.annotation.processing.Generated 替换 javax.annotation.Generated 是一个障碍。
@Johannes 不要添加模块java.compiler
只是为了获得javax.annotation.Generated
注释。添加包含该类型的模块,即java.xml.ws.annotation
@Thorbjørn Ravn Andersen 添加此依赖项时,出现错误“ org.apache.maven.plugin.PluginExecutionException: Execution default-test of goal org.apache.maven.plugins:maven-surefire -plugin:2.12.4:test failed: 分叉的 VM 没有正确告别就终止了。VM 崩溃或 System.exit 在构建过程中被调用。我错过了什么吗?【参考方案6】:
我有同样的问题并通过添加库 javax.annotation-api-1.3.2.jar 解决了
【讨论】:
以上是关于如何解决 java.lang.NoClassDefFoundError: javax/annotation/Generated?的主要内容,如果未能解决你的问题,请参考以下文章