我正在开发一个封闭源代码的Android库(以AAR形式发布),并希望为消费者提供一些javadocs,这需要一个sources.jar。
我知道我可以使用includes
property甚至整个包/文件夹来挑选每个文件。
task('androidSourcesJar', type: Jar) {
classifier = 'sources'
baseName = artifactBaseName
from android.sourceSets.main.java.srcDirs
include ('MyInterface1.kt', 'MyInterface2.kt', 'MyInterface3.kt')
}
有没有办法只包含public
类,接口,方法等?这似乎是一个以前会出现的问题。
答案 0 :(得分:3)
您可以尝试添加类似这样的内容,而不是添加include
:
from 'src/main/java'
eachFile { currentFile ->
String contents = new File(currentFile.getSourcePath()).text
if(!contents.contains("public class")) {
currentFile.exclude()
}
}
我不确定这是否行得通,但它应该使您走上正确的路。
由于Gradle实际上并未进行任何代码分析,因此您不能仅简单地说“仅包含具有公共类的文件”。相反,您必须编写仅包含公共类的自定义插件,或者执行类似我提供的操作。它包括源目录中的所有内容,但在每个文件上运行一些代码。首先,它获取文件的内容,然后检查该文件是否包含public class
。如果没有,则该文件没有公共类,因此应排除在外。
希望这会有所帮助!如有任何疑问,请随时提问。