Какой самый простой способ отказаться от пакета в Java? - PullRequest
30 голосов
/ 22 февраля 2011

Я работаю над новой кодовой базой и перевожу систему на новую платформу.

Есть ряд пакетов, которые я бы хотел осудить, просто чтобы другие разработчики очень четко поняли, что всевнутри этого пакета больше нельзя использовать для новых разработок.

Каков наилучший способ указать, что весь пакет устарел?

Ответы [ 6 ]

44 голосов
/ 11 апреля 2014

Мне пришлось сделать это недавно и использовать файл 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;

В Eclipse все места, где пользователь импортирует класс из этого пакета, будут подчеркнуты предупреждением об устаревании.

12 голосов
/ 22 февраля 2011

Вы сказали это сами: хотите исключить все, что есть внутри пакета, а не сам пакет.Пакет - это не что иное, как пространство имен, а устаревшее пространство имен будет иметь другое значение - например, больше не использует это пространство имен .Как и , не добавляйте новые элементы в это пространство имен. .

. В вашем случае я предлагаю вам отказаться от всех открытых методов (и полей) каждого класса, которые больше не должны использоваться.Это становится видимым в современных IDE, и разработчики получают предупреждение, когда хотят использовать старые классы и методы.И вы можете просмотреть свой код и поэтапно выполнить его рефакторинг, чтобы устранить зависимости этих классов и методов.

7 голосов
/ 22 февраля 2011

Использование AspectJ . Создайте Aspect, который выдает предупреждение компилятора при использовании пакета:

public aspect DeprecationAspect{

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

}

(Вы можете легко добавить AspectJ в свою сборку, если используете ant или maven )

2 голосов
/ 23 июля 2014

Для тех, кто пришел позже ...
Мое решение с IDEA "Заменить в пути"

Текст для поиска: (общедоступный | защищенный) + (\ s) (аннотация) (\ s) (статическая) (\ s) (конечная) (\ s) * (класс | интерфейс | перечисление | Enum)
Заменить на: @Deprecated \ n \ $ 1 \ $ 3 \ $ 5 \ $ 7 \ $ 9
Параметры: (выбрать) Регулярные выражения
Каталог: {Выберите каталог}

2 голосов
/ 22 февраля 2011

Вы можете создать Аннотация пакета и отказаться от использования любого пакета с помощью @Deprecated:)

0 голосов
/ 01 апреля 2019

Как уже упоминалось @muymoo, вы можете использовать файл package-info.java.Но все, что вы можете сделать, это добавить @deprecated предупреждение в JavaDoc вашего файла:

/**
 * @deprecated This package is deprecated, use {@link my.new.pkg} instead.
 */
package my.old.pkg;

JavaDoc действительно ваш единственный вариант, вы не можете @Deprecate пакет, использующий «правильную» аннотацию в коде

@Deprecated
package my.old.pkg;

приведет к ошибке компиляции в Java 8

$ java -version
java version "1.8.0_191"

$ javac package-info.java
package-info.java:6: error: modifier deprecated not allowed here

Единственный реальный, чистый вариант здесь -действительно не рекомендуется все классы в вашем пакете.Что имеет смысл, если вы подумаете об этом, потому что пакет в Java - это не более чем пространство имен.

...