Gradle仅针对公共接口生成sources.jar

时间:2019-04-02 20:58:16

标签: java android maven gradle kotlin

我正在开发一个封闭源代码的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类,接口,方法等?这似乎是一个以前会出现的问题。

1 个答案:

答案 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。如果没有,则该文件没有公共类,因此应排除在外。

希望这会有所帮助!如有任何疑问,请随时提问。