jdeprscan警告与--release 8
我有一个基于Java-9的standalone project与单个类Main.java
我正在试验在Java SE版本上摆动的jdeprscan
tool,当我在我的项目上使用版本9运行相同的没有日志(假设是预期的行为)的控制台:jdeprscan警告与--release 8
➜ 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
中也未标记为弃用。
问:为什么我在首位,甚至让这些警告,当我的代码没有任何与这些枚举常量的参与?
感谢您尝试使用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
的操作,除了增加噪音。但如果这会导致其他问题,请跟进。
(另请注意,您的代码使用JDK 9 API List.of
这意味着它是一个JDK 9类文件。jdeprscan
如果你问它来扫描JDK 9类,但提供--release 8
选项也许应该发出警告,它可能也是一个bug,它不会发出这样的警告。)
Java 9已经完成了标准库的重新包装。这意味着,当您创建一个小应用程序时,依赖库的数量远远小于Java 8中的相应需求。第二个问题的答案是,应用程序的一些传递依赖性会在出现警告的那些包中使用注释。
同样,对于第一个问题,因为您没有明确列出包含这些注释类的所有jar,所以依赖项扫描程序无法找到定义。警告与弃用无关;它指出jdeprscan
无法找到未提供的类中的定义。
该项目的唯一依赖模块是['java.base'](https://github.com/namannigam/Jigsaw/blob/master/独立/ SRC /独立/ module-info.java)。即使我将其删除,警告仍然存在。 ***依赖库的数量比Java 8中相应的要求小得多***我没有用'jdeprscan'得到这个。正如文档链接所说**使用jdeprscan工具作为静态分析工具,可以扫描jar文件(或其他类文件聚合)以使用已弃用的API元素。**并且我不确定为什么其他警告不是显示。 – nullpointer
(1)感谢Stuart恢复原状并报告错误。 (2)* jdeprscan试图查找它们以查看它们是否被弃用*但我认为它们在Java8中也不被弃用,在问题 (3)中已经链接*请注意,您的代码使用了JDK 9 API List.of这意味着它是一个JDK 9类文件* ...我认为module-info.java是一个更好的证明。 – nullpointer