如何解决 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Ajax 跨域请求不到的问题

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题