У меня есть библиотечный модуль Android, в котором класс publi c использует некоторые аннотации из внешней библиотеки. Аннотации используются исключительно для внутренних целей, поэтому я не хочу выставлять их как зависимость API
Gradle, утечку этой зависимости клиентам, но оставлю ее как implementation
.
Однако наличие аннотации вызывает предупреждения для приложений, использующих мою библиотеку, поскольку класс аннотации не может быть разрешен. Это на самом деле вполне понятно - класс publi c содержит символ, который не находится на пути компиляции клиента - но есть ли способ сохранить аннотации внутренними при упаковке библиотеки - или как-то игнорировать вызывающее приложение? Аннотации RUNTIME
сохраняются, поэтому их нельзя полностью удалить на этапе сборки или аналогичным образом.
Настройка в иллюстративных целях:
my-library:
build.gradle
имеет implementation com.example.foobar
, который содержит @Example
аннотацию Foo.java
- публикуемый c класс, аннотированный @Example
:
@Example(foo = "bar")
public class Foo {
...
}
- Другие классы в
my-library
требуют, чтобы аннотация присутствовала во время выполнения
some-client:
build.gradle
имеет implementation com.example.mylibrary
, который содержит класс Foo
- Это приложение использует
Foo
объекты, но ему не нужно знать о аннотации, однако при построении она получит:
classes.jar(com/example/Foo.class): warning: Cannot find annotation method 'foo()' in type 'Example': class file for com.example.Example not found
Если изменить implementation
на API
для com.example.foobar
, предупреждение будет удалено, но теперь приложение получит аннотацию @Example
на своем пути сборки, которая является внутренней детали реализации. Есть ли другой способ?