升级 JDK 之前怎么知道自己的 jar 和依赖里有多少已废弃甚至即将移除的 API?javac 的警告看不到第三方 jar,jdeprscan 可以。这篇用它扫自己的类和三个老库,并看各个 release 的废弃清单有多大。
javac 报告的警告数: 10 ;其中 removal 类警告数: 5
行 3 [removal] Integer(int) in Integer has been deprecated and marked for removal
行 4 [deprecation] Date(int,int,int) in Date has been deprecated
行 5 [deprecation] getId() in Thread has been deprecated
行 6 [removal] stop() in Thread has been deprecated and marked for removal
行 7 [removal] runFinalization() in Runtime has been deprecated and marked for removal
行 8 [removal] finalize() in Object has been deprecated and marked for removal
行 9 [removal] getSecurityManager() in System has been deprecated and marked for removal
行 10 [deprecation] URL(String) in URL has been deprecated
行 11 [deprecation] Observable in java.util has been deprecated
行 11 [deprecation] Observable in java.util has been deprecated 默认(全部废弃 API):
Jar file old.jar:
class Old uses deprecated class java/util/Observable
class Old uses deprecated method java/lang/Integer::<init>(I)V (forRemoval=true)
class Old uses deprecated method java/util/Date::<init>(III)V
class Old uses deprecated method java/lang/Thread::getId()J
class Old uses deprecated method java/lang/Thread::stop()V (forRemoval=true)
class Old uses deprecated method java/lang/Runtime::runFinalization()V (forRemoval=true)
class Old uses deprecated method java/lang/System::getSecurityManager()Ljava/lang/SecurityManager; (forRemoval=true)
class Old uses deprecated method java/net/URL::<init>(Ljava/lang/String;)V
class Old has field named ob of deprecated type java/util/Observable
class Old overrides deprecated method java/lang/Object::finalize()V (forRemoval=true)
--for-removal:
Jar file old.jar:
class Old uses deprecated method java/lang/Integer::<init>(I)V (forRemoval=true)
class Old uses deprecated method java/lang/Thread::stop()V (forRemoval=true)
class Old uses deprecated method java/lang/Runtime::runFinalization()V (forRemoval=true)
class Old uses deprecated method java/lang/System::getSecurityManager()Ljava/lang/SecurityManager; (forRemoval=true)
class Old overrides deprecated method java/lang/Object::finalize()V (forRemoval=true)--release 8 发现 2 条;前几条: ['deprecated method java/util/Date::<init>(III)V ', 'deprecated method java/lang/Thread::stop()V '] --release 11 发现 6 条;前几条: ['deprecated class java/util/Observable ', 'deprecated method java/lang/Integer::<init>(I)V ', 'deprecated method java/util/Date::<init>(III)V ', 'deprecated method java/lang/Thread::stop()V '] --release 17 发现 7 条;前几条: ['deprecated class java/util/Observable ', 'deprecated method java/lang/Integer::<init>(I)V (forRemoval=true)', 'deprecated method java/util/Date::<init>(III)V ', 'deprecated method java/lang/Thread::stop()V '] --release 21 发现 10 条;前几条: ['deprecated class java/util/Observable ', 'deprecated method java/lang/Integer::<init>(I)V (forRemoval=true)', 'deprecated method java/util/Date::<init>(III)V ', 'deprecated method java/lang/Thread::getId()J ']
release 8 废弃 API 471 条,其中 for removal 10 条
release 11 废弃 API 583 条,其中 for removal 25 条
release 17 废弃 API 656 条,其中 for removal 76 条
release 21 废弃 API 681 条,其中 for removal 103 条
--list --for-removal --release 21 的前 12 条:
@Deprecated(since="17", forRemoval=true) void java.util.logging.LogManager.checkAccess()
@Deprecated(since="9", forRemoval=true) void javax.imageio.stream.FileCacheImageInputStream.finalize()
@Deprecated(since="9", forRemoval=true) void javax.imageio.stream.FileImageInputStream.finalize()
@Deprecated(since="9", forRemoval=true) void javax.imageio.stream.FileImageOutputStream.finalize()
@Deprecated(since="9", forRemoval=true) void javax.imageio.stream.ImageInputStreamImpl.finalize()
@Deprecated(since="9", forRemoval=true) void javax.imageio.stream.MemoryCacheImageInputStream.finalize()
@Deprecated(since="9", forRemoval=true) class java.applet.Applet
@Deprecated(since="9", forRemoval=true) interface java.applet.AppletContext
@Deprecated(since="9", forRemoval=true) interface java.applet.AppletStub
@Deprecated(since="9", forRemoval=true) interface java.applet.AudioClip
@Deprecated(since="20", forRemoval=true) class javax.management.loading.MLet
@Deprecated(since="20", forRemoval=true) class javax.management.loading.MLetContent commons-lang-2.6.jar 发现 32 条使用已废弃 API(其中 for removal 28 条),耗时 3.3 秒;最多的类:[('method java/lang/Integer', 7), ('method java/lang/Long', 4), ('method java/lang/Double', 4)]
for removal 示例:class org/apache/commons/lang/ArrayUtils uses deprecated method java/lang/Character::<init>(C)V (forRemoval=true)
for removal 示例:class org/apache/commons/lang/ArrayUtils uses deprecated method java/lang/Long::<init>(J)V (forRemoval=true)
log4j-1.2.17.jar 发现 29 条使用已废弃 API(其中 for removal 17 条),耗时 3.6 秒;最多的类:[('method java/lang/Integer', 6), ('method java/awt/Dialog', 6), ('method java/net/URL', 3)]
for removal 示例:class org/apache/log4j/AppenderSkeleton overrides deprecated method java/lang/Object::finalize()V (forRemoval=true)
for removal 示例:class org/apache/log4j/AsyncAppender$DiscardSummary uses deprecated method java/lang/Integer::<init>(I)V (forRemoval=true)
guava-18.0.jar 发现 7 条使用已废弃 API(其中 for removal 2 条),耗时 6.6 秒;最多的类:[('method java/lang/reflect/AccessibleObject', 2), ('method java/net/URL', 1), ('class java/security/AccessController (forRemoval=true)', 1)]
for removal 示例:class com/google/common/cache/Striped64 uses deprecated class java/security/AccessController (forRemoval=true)
for removal 示例:class com/google/common/io/FileBackedOutputStream$1 overrides deprecated method java/lang/Object::finalize()V (forRemoval=true)