Итак, я играл в Gradle и Android Studio сейчас с первых дней их создания. Тем не менее, я считаю себя стучал головой о стены гораздо более раз, то стоит иногда :(.Gradle create multi project Jar
я провел полтора дня, пытаясь решить мою текущую дилемму.
Где я работаю мы используйте много проектов с общими библиотеками. Это означает, что, в отличие от собственного предположения Gradle, мои проекты НЕ все вложены в один родительский проект. (НО это НЕ мой вопрос). Я получил эту работу.
После того, как наши проекты стали полный и готовый к работе, было предложено создать SDK для текущей инфраструктуры проекта для внешнего использования. Теперь в старом IntelliJ я бы просто сгенерировал некоторые JavaDocs и создал Артефакт, который включает в себя ll, а затем другой, который не включает баны зависимости и не упоминает их с уважением.
Однако, в Gradle это кажется очень сложным, возможно даже неподдерживаемым, и я не могу найти никого другого, кто сделал это после более чем 10 часов Google и проб и ошибок, я, наконец, решил сделать демоверсию чтобы показать, что я делаю и что я пытаюсь выполнить.
Мне нужно сделать несколько вещей.
- Создать файл Jar, который включает весь код модуля зависимостей и зависимые Jar файлы
- Генерировать файл Jar, который включает в себя весь код модуля зависимостей и ZERO зависимых Jar файлов
- Генерировать файл AAR, который включает в себя все зависимости модулей код и зависимые файлы Jar, а также ресурсы для запуска нашей деятельности, если они хотят ее использовать.
- Создайте файл AAR, содержащий все модули зависимостей модуля и файлы JAR ZERO, а также ресурсы для запуска нашей деятельности, если они хотят его использовать.
Итак, там, в лжи, моя проблема. Каждый модуль при запуске Task с (type: Jar) просто генерирует собственный код. Мне удалось получить зависимые файлы Jar для компиляции за один раз, но тогда нет обычного исходного кода, но я НИКОГДА не мог получить исходный код модуля для включения в файл Jar, который сейчас является моим самым большим препятствием ,
Вот список задач, которые я пробовал, но не выполнив эту простую задачу.
evaluationDependsOn(':dependencyModule')
task myJar(type: Jar){
appendix = 'myJar'
from android.sourceSets.main.allSource.files
}
task uberJar (type: Jar){
from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
}
task fatJar(type: Jar, dependsOn: 'compileJava') {
from {
sourceSets.main.output.classesDir
}
// Add all dependencies except for android.jar to the fat jar
from {
configurations.compile.findAll {
it.getName() != 'android.jar'
}.collect {
it.isDirectory() ? it : zipTree(it)
}
}
archiveName = 'fatJar.jar'
}
task jarFat(type: Jar) {
appendix = "fat"
from android.sourceSets.main.java
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.allSource
classifier = 'sources'
}
task clearJar(type: Delete) {
delete 'build/libs/myCompiledLibrary.jar'
}
task makeJar(type: Copy) {
from('build/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'myCompiledLibrary.jar')
}
makeJar.dependsOn(clearJar, build)
task jar(type: Jar) {
from android.sourceSets.main.allJava
}
task deployJar(type: Jar, dependsOn: jar) {
baseName = project.name + '-deploy'
deps = configurations.runtime + configurations.archives.allArtifactFiles
depClasses = { deps.collect { it.isDirectory() ? it : zipTree(it) } }
from(depClasses) {
exclude 'META-INF/MANIFEST.MF'
}
}
task modelJar(type: Jar) {
from sourceSets.main.output
}
task jarWithDependency(type: Jar){
from android.sourceSets.main.classesDir
from {configurations.compile.collect {zipTree(it)}}
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.allJava
}
Ничего еще не сделано. Любая помощь будет принята с благодарностью! Заранее благодарим за то, что нашли время, чтобы посмотреть на это. У меня есть полный проект Sample Project, если кому-то это понравится, но я не вижу возможности загрузить здесь, так что это ссылка на проект Demo, который я построил. Это очень мало и очень легко следовать. Один класс или метод в основном для каждого проекта.
Эй, спасибо за ответ. Можете ли вы объяснить, что это делает? Если я использую первую строку, я получаю сообщение об ошибке, что время выполнения не может быть найдено в конфигурациях. и я не уверен, что делают другие три линии. – Sam
отредактировал пример для большей ясности. Не забудьте «apply: application» в начале скрипта сборки. – Zagrev
Возможно, я ошибаюсь, но я не думаю, что Android будет работать с плагином приложения. Он просто терпит неудачу и говорит, что вы не можете применить java-плагин к Android – Sam