unrecognized Attribute name MODULE (class com.sun.tools.javac.util.SharedNameTable$NameImpl)

0. 发现问题

今天项目接入了一个新模块

提示我的compileSdkVersion 太低,正常情况下,我自然会想到升级:30-->31

正当我编译项目时,报了以下错误

···
unrecognized Attribute name MODULE (class com.sun.tools.javac.util.SharedNameTable$NameImpl)
···

字面意思就是:无法识别模块的属性名称

度娘一会,解决方案都是降版本。

这是逃避问题,不是解决问题啊喂。

1. 思考

因为升级了编译工具导致,所以降版本之后,肯定可以编译。

但是,项目接入新模块,要求要用31版本。所以降版本行不通

2. 解决方法

解决方法很简单:

Windows电脑,在Android Studio中

Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK

JDK选择11。最后应用保存就好了

MAC电脑,在Android Studio中

Android Studio > Preferences > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK

JDK选择11。

3. 后记

因为Android12似乎至少需要JDK11+

所以,我的项目还在使用JDK1.8 当然会出现不适配的情况

4.逼逼赖赖

本来想吐槽一下国内环境。想想还是算了。

希望博文能帮助到 跟我一样遇到这个问题的人吧。

var code = "b5f5417e-50fe-4c86-80fe-fac126de9895"
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个Java编译器错误,错误信息为“java.lang.assertionerror: annotationtype(): unrecognized attribute name module (class com.sun.tools.javac.util.unsharednametable$nameimpl)”。 这个错误通常是由于编译器版本不兼容或编译器配置错误导致的。建议检查编译器版本和配置,确保它们与代码兼容。如果问题仍然存在,可以尝试使用其他编译器或更新编译器版本。 ### 回答2: 这个错误是由于Java编译器无法识别模块(module)这个属性名,而导致的一种错误类型。通常情况下,当我们使用Java编译器编译Java程序时,它会将程序代码编译成字节码(bytecode)并在执行之前先进行类型检查。当Java编译器发现程序中存在语法错误或代码逻辑错误时,就会抛出异常并终止程序的执行。 在该错误中,Java编译器认为程序代码中包含了无法识别的模块属性,进而抛出异常。这种错误通常与Java程序中使用的注解(Annotation)有关。注解是Java语言中的重要特性之一,用于为程序代码添加元数据(metadata)信息,以便在程序执行时进行某些操作或产生某些效果。 在该错误中,出现了一个注解类型里面的模块(module)属性,并且该属性的值无法被Java编译器识别。这种情况通常是由于程序中使用了未经充分测试或不完全符合Java语言规范的注解库所引起,导致注解库中存在一些无法识别的属性或值,从而引发Java编译器抛出该错误信息。 要避免这种错误,我们需要使用经过充分测试并符合Java语言规范的注解库,或者自行编写自己的注解库来满足程序需求。另外,在编写Java程序时,也要注意细节,遵循Java语言编程规范并进行充分测试,以确保程序的稳定和正确性。 ### 回答3: 在Java中,AssertionError是一种错误类型,通常表示一个断言失败了。断言是一种关键字,在编码的时候可以用来检查程序的状态是否满足预期条件,一旦这些条件不满足,程序就应该立即中止。而这个错误的提示中包含了“annotationtype(): unrecognized attribute name module”这样的信息,给我们的信息比较明显,是关于注解的错误。 在Java 9之后,增加了模块化系统。模块是一种组织代码的方式,它们可以依赖于其他模块,也可以被其他模块所依赖。因此,在模块化系统中,Java引入了一种新的方式来表示模块之间的依赖关系,即使用注解来表示这种依赖关系。这些注解包括了module、requires、exports、opens、provides和uses等等。 而在这个错误中,它提示了一个“unrecognized attribute name module”的信息,说明在使用注解的过程中出现了一个不被认可的module属性。然而,在这个错误信息中也给了我们具体的错误位置“class com.sun.tools.javac.util.unsharednametable$nameimpl”,这提醒我们可以从这个类的使用上找到错误。unsharednametable是一个实用程序类,它提供了一个名称表的实现。这个错误提示指出,它的nameimpl子类可能是我们出错的地方。 解决这个错误的方法,最直接的就是检查代码中使用注解的位置,确认是否在使用时忘记了一些重要的属性或者值,进一步排查可以更多的细节:1.检查代码中是否存在语法错误; 2.检查依赖是否正确加载; 3.检查是否使用正确的Java版本; 4.检查代码中是否有不符合规范的操作。 总之,在出现这个错误时,我们需要尽快找到错误的源头,并且有条有理地解决它,排除故障,保证程序的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值