Gradle генерирует sources.jar только для открытых интерфейсов - PullRequest
1 голос
/ 02 апреля 2019

Я работаю над библиотекой Android с закрытым исходным кодом (опубликованной как AAR) и хочу включить некоторые javadoc для потребителей, для которых требуется файл sources.jar.

Я знаю, что могу выбрать каждый файл, используя свойство includes или, возможно, даже целый пакет / папку.

task('androidSourcesJar', type: Jar) {
    classifier = 'sources'
    baseName = artifactBaseName
    from android.sourceSets.main.java.srcDirs
    include ('MyInterface1.kt', 'MyInterface2.kt', 'MyInterface3.kt')
}

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

1 Ответ

3 голосов
/ 03 апреля 2019

Вы можете попробовать добавить что-то вроде этого вместо вашего include:

from 'src/main/java'
eachFile { currentFile ->
    String contents = new File(currentFile.getSourcePath()).text
    if(!contents.contains("public class")) {
        currentFile.exclude()
    }
}

Я не совсем уверен, работает ли это, но это должно указать вам правильный путь туда, куда вы хотите пойти.

Поскольку Gradle на самом деле не выполняет никакого анализа кода, вы не можете просто сказать «включать только те файлы, которые имеют общедоступные классы». Вместо этого вам нужно либо написать собственный плагин, который будет включать только публичные классы, либо сделать что-то вроде того, что я предоставил. Он включает в себя все из исходного каталога, но запускает немного кода для каждого файла. Сначала он получает содержимое файла, затем проверяет, содержит ли этот файл public class. Если нет, файл не имеет публичного класса и должен быть исключен.

Надеюсь, это поможет! Не стесняйтесь задавать дополнительные вопросы, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...