在Java中弃用包的最简单方法是什么?

Dan*_*iuc 32 java package deprecated

我正在研究新的代码库并将系统迁移到新的框架.

我想弃用许多软件包,只是为了让其他开发人员明白这个软件包中的所有东西都不应该用于新的开发.

指示整个包已被弃用的最佳方法是什么?

muy*_*moo 47

我最近不得不这样做并使用该package-info.java文件来弃用包.

http://www.intertech.com/Blog/whats-package-info-java-for/

package-info.java仅使用包声明将文件添加到包中:

/**
 * @deprecated As of release 2.0, replaced by {@link com.acme.new.package}
 */
@Deprecated
package com.acme.old.package;
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,用户从此包导入类的所有位置都将使用弃用警告下划线.

  • @muymoo,我使用的是java 8,它不允许我在我的`JavaDoc`中使用`@ deprecated`修饰符.因此我早先的评论. (4认同)
  • 从Java 7开始,我认为这是正确的答案,因为现在可以使用@Deprecated作为包注释:http://bugs.java.com/bugdatabase/view_bug.do?video_id = 6492694 (2认同)
  • 我相信javadoc的package-info级别中不允许使用@deprecated修饰符。 (2认同)
  • 从IntelliJ 2017.2开始,这不会在包中标记类,也不会将包本身标记为已弃用. (2认同)

And*_*s_D 12

你自己说过:你想要弃用包的所有内容,而不是包本身.该包只是一个命名空间,并且弃用命名空间会有不同的含义 - 就像不再使用这个命名空间一样.就像不向该命名空间添加任何新项目一样.

在您的情况下,我建议您弃用不应再使用的每个类的每个公共方法(和字段).这在现代IDE中变得可见,并且开发人员在想要使用旧类和方法时会被警告.您可以查看代码并逐步重构它以消除这些类和方法的依赖关系.

  • 嗯,在我的情况下,需要添加很多注释.我希望有一些方法可以在包级别执行一次,IDE将以与在每个方法和字段上完成它相同的方式运行. (8认同)
  • 您只能将包中的每个类标记为 @Deprecated。无需为所有方法和字段添加注释。 (2认同)
  • _“包只是一个命名空间”_ 错误。包和命名空间是完全不同的东西,以不同的方式工作(例如命名空间可以嵌套在其他命名空间中)。 (2认同)
  • 这不应该再是公认的答案。Java 已经修复了错误,并且包上的“@Deprecated”现在可以完美运行(Java 9)。这个答案是错误的,如果它仍然被接受,我会在某个时候对其投反对票(这对@Andreas_D来说并不公平) (2认同)

Sea*_*oyd 7

使用AspectJ.创建一个在使用包时发出编译器警告的Aspect:

public aspect DeprecationAspect{

    declare warning :
        call(* foo.bar..*(..)) : "Package foo.bar is deprecated";

}
Run Code Online (Sandbox Code Playgroud)

(如果使用antmaven,可以轻松地将AspectJ添加到构建中)

  • 有关矫枉过正吗?我的建议归结为[向maven pom添加<20行](http://mojo.codehaus.org/aspectj-maven-plugin/usage.html)并编写一个3行文本文件.将其与接受的答案进行比较,手动弃用包中的每个公共字段和方法.现在*那是*过度杀伤! (7认同)
  • @Software Monkey我不同意.这是一个高素质的专家免费提供建议的网站.不要说免费建议是可以接受的,但是如果答案很糟糕的话,那么花时间提供答案的其他人也是可以接受的.即使这样,人们也应该通过陈述你不同意的方式给海报一个机会来改善他的答案.你叫那抱怨?我不同意.我打电话给你做什么婊子,我想你不同意.让我们离开吧.对我来说,无评论的downvoters对这样的工作答案会破坏这个网站. (2认同)