我有一个基于Java-9的独立项目,它有一个单独的类Main.java,当我在我的项目上使用版本9运行相同的工具时,在控制台中没有日志(假设这是预期的行为):
➜独立git:(主)✗jdeprscan --第9版。目录.:
这意味着,在我看来,代码中并没有使用不受欢迎的API。
然后,我对第8版也做了同样的尝试,尽管我没有再次获得任何Deprecated日志,但是控制台显示了项目的某些警告:
➜独立git:(主)✗jdeprscan --第8版。警告:未知枚举常量javax.annotation.Resource.AuthenticationType.CONTAINER警告:未知枚举常量javax.jws.soap.SOAPBinding.Use.LITERAL警告:未知枚举常数javax.jws.soap.SOAPBinding.Use.LITERAL警告
问:为什么对第8版而不是第9版有警告?为了在这里添加细节,例如在JavaSE8中,https://docs.oracle.com/javase/8/docs/api/javax/jws/WebParam.Mode.html#IN也没有被标记为弃用。
问:当我的代码不涉及这些枚举常量时,我为什么要得到这些警告呢?
编辑:我正在尝试使用JDK10(GA版本)和JDK11(EA),我可以在这里更新的是,唯一剩下的警告是
警告:未知枚举常量javax.jws.soap.SOAPBinding.Use.LITERAL
另外两个已经消退了。
发布于 2017-09-05 02:49:57
谢谢您试用jdeprscan工具。
这是jdeprscan或底层工具机制中的一个错误。jdeprscan所做的第一件事是运行JDK中的所有类,以找出不推荐的内容。考虑到--release选项,它使用了一些内部javac表,这些表包含在该版本中存在的类库的表示形式,在本例中是JDK 8。我还没有对其进行调试,但我怀疑JDK中的其他部分引用了这些特定的枚举常量,而jdeprscan正在试图查找它们,以查看它们是否已不推荐使用。
但是,这些都是在javax.xml.ws和javax.xml.ws.annotation模块中定义的,它们不是默认根模块集的一部分,因此常规查找将找不到它们。这可能就是发出警告的原因。(请注意,javax.xml.ws和javax.xml.ws.annotation模块本身是不受欢迎的,但我不认为这与此问题有任何关系。)
我已经注册了JDK-8187155来跟踪这个问题。我认为这不应该影响jdeprscan的操作,除了增加噪音。但如果这会引起更多问题,请采取后续行动。
(还请注意,您的代码使用了JDK9API List.of,这意味着它是一个JDK9类文件。如果您要求jdeprscan扫描JDK 9类,但是提供了--release 8选项,那么它可能会发出警告。它也可能是一个错误,它没有发出这样的警告。)
发布于 2017-09-04 15:54:34
Java 9对标准库进行了主要的重新打包。这意味着,当您创建一个小型应用程序时,依赖库的数量要比Java 8中相应的要求少得多。第二个问题的答案是,应用程序的某些传递依赖项在您收到警告的包中使用注释。
同样,对于第一个问题,由于您没有显式列出包含这些注释类的所有jars,所以依赖扫描程序无法找到定义。该警告与弃用无关;它指出jdeprscan无法在未提供的类中找到定义。
https://stackoverflow.com/questions/46040200
复制相似问题