jdeprscan警告--版本8

djmepvbi  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(416)

我有一个基于java-9的独立项目,只有一个类 Main.java 我在上面试验 jdeprscan 工具以java se版本为中心,当我在我的项目上使用release 9运行相同的工具时,控制台中没有日志(假设这是预期的行为):

➜  standalone git:(master) ✗ jdeprscan --release 9 .
Directory .:

这意味着代码中没有我认为应该使用的不推荐使用的api。
然后我尝试了同样的版本8,虽然我没有得到任何 Deprecated 再次登录,但控制台显示项目的某些警告:

➜  standalone git:(master) ✗ jdeprscan --release 8 .
warning: unknown enum constant javax.jws.WebParam.Mode.IN
warning: unknown enum constant javax.jws.soap.SOAPBinding.Use.LITERAL
warning: unknown enum constant javax.annotation.Resource.AuthenticationType.CONTAINER

问:为什么发布版本8会有警告而版本9不会?添加到此处的详细信息,例如在javase8中 WebParam.Mode.IN 也未标记为已弃用。
问:当我的代码不涉及这些枚举常量时,为什么一开始就收到这些警告?
编辑:我在jdk10(ga发行版)和jdk11(ea)上尝试了一下,我可以在这里更新的是,剩下的唯一警告是

warning: unknown enum constant javax.jws.soap.SOAPBinding.Use.LITERAL

另外两个已经平息了。

lnlaulya

lnlaulya1#

Java9对标准库进行了重大的重新打包。这意味着,当您创建一个小型应用程序时,依赖库的数量远远小于Java8中相应的需求。第二个问题的答案是,应用程序的某些可传递依赖项在收到警告的包中使用注解。
类似地,对于第一个问题,由于没有显式列出包含这些注解类的所有jar,依赖关系扫描程序无法找到定义。警告与贬损无关;它说 jdeprscan 在未提供的类中找不到定义。

f4t66c6m

f4t66c6m2#

感谢您试用 jdeprscan 工具。
这是一个错误 jdeprscan 或者在底层的工具机制中。第一件事 jdeprscan 要做的是遍历jdk中的所有类,找出哪些类已被弃用。鉴于 --release 选项,它使用一些内部 javac 包含在该版本中出现的类库表示形式的表,在本例中为jdk8。我还没有对此进行调试,但我怀疑jdk中的其他地方引用了这些特定的enum常量,并且 jdeprscan 正在尝试查找它们以查看它们是否已被弃用。
但是,这些定义在 javax.xml.ws 以及 javax.xml.ws.annotation 模块,这些模块不是默认的根模块集的一部分,因此正常的查找不会找到它们。这可能就是发出警告的原因(请注意 javax.xml.ws 以及 javax.xml.ws.annotation 模块本身已被弃用,但我认为这与此问题无关。)
我已经提交了jdk-8187155来追踪这个问题。我不认为这会影响 jdeprscan 除了增加噪音。但如果这会导致其他问题,请跟进。
(还要注意,您的代码使用了JDK9API List.of 这意味着它是一个jdk9类文件。 jdeprscan 如果您要求它扫描JDK9类,但提供 --release 8 选项。也可能是一个bug,它没有发出这样的警告。)

相关问题