Я пытаюсь втиснуть существующую библиотеку с открытым исходным кодом из Github, которая была изначально создана (и в настоящее время поддерживается как) очень, очень большой и сложный набор проектов Eclipse, во что-то, что может быть непосредственно встроено в Android Studio с помощью Gradle.
Проекты в этом репо: https://github.com/unidata/awips2-core
Его зависимости находятся в этом репо: https://github.com/unidata/awips2-core-foss
Репозиторий awips2-core имеет следующую структуру каталогов:
./awips2-core/common/
./awips2-core/edex/
./awips2-core/features/
.awips2-core/viz/
Каждый из этих четырех каталогов содержит каталоги верхнего уровня для нескольких проектов с такими именами, как "com.raytheon.uf.common.util"
Эти каталоги имеют следующее содержимое (на примере проекта 'util'):
META-INF
src (contains ./com/raytheon/uf/common/util/*.java)
tests (same as src)
.classpath
.project
build.properites
com.raytheon.uf.common.util.ecl
Я создал проект Android Studio с минимальным Activity и модулем с именем app в c: \ src \ awips2core-android, затем приступил к проверке двух репозиториев Git в подкаталогах корневого каталога проекта:
cd \src\awips2core-android
git clone https://github.com/unidata/awips2-core
git clone https://github.com/unidata/awips2-core-foss
Затем я изменил settings.gradle:
include ':awips2core'
include ':app'
project(':awips2core').projectDir = new File('./awips2-core')
... и добавил /src/awips2core-android/awips2-core/build.gradle:
apply plugin: 'java'
sourceSets {
main {
java {
srcDirs = ['common/com.raytheon.uf.common.util/src', 'common/com.raytheon.uf.common.wxmath/src']
}
}
}
dependencies {
compile fileTree(dir: '../awips2-core-foss')
}
Это работает.
Проблема:
У меня есть еще 41 srcDirs в общем /, и почти сто, если вы включите те в edex /, features / и viz /.
Мне бы хотелось добавить их программно, а не по одному. В терминах Java что-то вроде:
List<File> srcPaths = new ArrayList<File>();
String[] paths = {"common", "features", "edex", "viz"};
for(String subdir : paths) {
// the path "c:/src/awips2core-android/awips2-core" would be implied by the project's definition in gradle.settings
File projDir = new File("c:/src/awips2core-android/awips2-core", subdir);
File[] subprojectDirs = projDir.listFiles();
for (File dir : subprojectDirs)
srcPaths.add(new File(dir, "src"));
}
// now, set set Gradle's srcDirs to srcPaths' elements...
Итак ... Как мне реализовать это в Groovy для Gradle или как правильный способ добиться этого с помощью Gradle?