Java 剥离内部注释
我有一个Android库模块,其中一个公共类使用来自外部库的一些注释。注释纯粹是在内部使用的,因此我不想将其作为Java 剥离内部注释,java,annotations,java-annotations,gradle-dependencies,Java,Annotations,Java Annotations,Gradle Dependencies,我有一个Android库模块,其中一个公共类使用来自外部库的一些注释。注释纯粹是在内部使用的,因此我不想将其作为APIGradle依赖项公开,从而将该依赖项泄漏给客户端,而是将其作为实现之一保留 但是,注释的存在会对使用my library的应用程序发出警告,因为无法解析注释类。这实际上是可以理解的-一个公共类包含一个不在客户端编译路径上的符号-但是有没有一种方法可以在打包库时将注释保存在内部-或者被调用的应用程序忽略?注释是运行时的保留注释,因此它们不能在构建步骤或类似步骤中完全剥离 用于说明
API
Gradle依赖项公开,从而将该依赖项泄漏给客户端,而是将其作为实现
之一保留
但是,注释的存在会对使用my library的应用程序发出警告,因为无法解析注释类。这实际上是可以理解的-一个公共类包含一个不在客户端编译路径上的符号-但是有没有一种方法可以在打包库时将注释保存在内部-或者被调用的应用程序忽略?注释是运行时的
保留注释,因此它们不能在构建步骤或类似步骤中完全剥离
用于说明目的的设置:
我的库:
具有build.gradle
,其中包含实现com.example.foobar
注释@example
是一个用Foo.java
注释的公共类:@Example
本身中的其他类要求在运行时显示注释my library
具有build.gradle
,其中包含类implementation com.example.mylibrary
Foo
- 此应用程序使用
对象,但不需要了解注释,但在构建时会得到:Foo
如果我将
com.example.foobar
的implementation
更改为API
,警告将被消除,但应用程序现在将在其构建路径上获得@example
注释,这是一个内部实现细节。还有其他方法吗?如果您不希望注释在运行时出现,那么为什么要将它们标记为runtime
retention?如果您不希望它们在构建工件中可见,请将它们转换为源代码保留注释。如果这不是一个选项,那么你可以做Android本身做的事情:有两个不同的构建工件,一个是你构建和运行的实际代码,另一个是作为其他人编译时使用的API(除了你的情况,第二个也可以是完全工作的,但不同的工件)。它们用于对象的序列化。是的,我可以发明一些东西来创建单独的剥离工件,但这似乎有点过分。但是,谢谢。如果您需要在运行时显示这些类,那么在运行时就没有办法在用户的类路径上要求它们。或者,只有在不在某个客户端的上下文中运行时(即仅在某个内部工具中运行,但在由用户代码加载时不运行),您的库才需要注释?
@Example(foo = "bar")
public class Foo {
...
}
classes.jar(com/example/Foo.class): warning: Cannot find annotation method 'foo()' in type 'Example': class file for com.example.Example not found