【发布时间】:2025-12-25 09:45:10
【问题描述】:
我正在尝试将来自 Github 的现有开源库进行按摩,该库最初是创建(并且当前维护为)一组非常、非常大和复杂的 Eclipse 项目,可以直接在 Android Studio 中使用摇篮。
项目在这个仓库中:https://github.com/unidata/awips2-core
它的依赖在这个 repo 中: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
我在 c:\src\awips2core-android 中创建了一个具有最小 Activity 和名为“app”的模块的 Android Studio 项目,然后将两个 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')
}
这行得通。
问题:
common/ 下还有 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 for Gradle 中实现这一点,或者使用 Gradle 实现这一点的正确方法是什么?
【问题讨论】:
标签: gradle