我有一个项目,我试图从Java源文件的树中包含单个文件到库项目中。无论我做什么,我都无法仅包含该文件。我在另一个项目中取得了成功,除了那个项目以外的所有文件,但只有在从库项目运行gradle时才有效。当它从应用程序目录运行时,所有文件都包含在内。在尝试创建一个复制问题的简单项目时,同样排除所有项也不起作用。Gradle从源码集排除文件不起作用
样本文件树很简单:
application - android app that includes the two libraries
library1/
build.gradle
src/main/AndroidManifest.xml
library2/
build.gradle
src/main/AndroidManifest.xml
java/src/com/company/product/
/pkg1
Source1.java, Source2.java, Source3.java
libraryoneonly/Library1Source.java
/pkg2
Source1.java, Source2.java, Source3.java
的LIBRARY1的build.gradle看起来是这样的。包含或不包括下面的工作。
LIBRARY1 /的build.gradle
apply plugin: 'com.android.library'
android {
sourceSets {
main.jni.srcDirs = []
main.jniLibs.srcDir 'src/main/libs'
main.java {
srcDir "../../java/src"
exclude { FileTreeElement elem ->
println "Searching for files, found: " + elem.relativePath
!(elem.isDirectory() || elem.name.equals('Library1Source.java'))
}
//include ("**/libraryoneonly/**")
//include ('com/company/product/pkg1/libraryoneonly/Library1Source.java')
}
}
dependencies {
compile project(':library2')
}
而且library2的build.gradle。令人惊讶的是,下面的未注释排除确实有效。
library2 /的build.gradle
apply plugin: 'com.android.library'
android {
sourceSets {
main.jni.srcDirs = []
main.jniLibs.srcDir 'src/main/libs'
main.java {
srcDir "../../java/src"
//exclude { FileTreeElement elem -> ((elem.path.contains('/libraryoneonly/'))) }
exclude ('com/company/product/pkg1/libraryoneonly/Library1Source.java')
}
}
只是要注意的,我从来没有看到 “的文件搜索,找到” 当LIBRARY1正在建设的文本。我不知道为什么。我确实在这个测试从较大的项目中看到它,这取决于构建的运行位置。
如果您想拉样本项目,并尝试一下,这里是一个链接:https://github.com/gbak/gradleTest
感谢您的回应,我已经尝试过srcDir方法,但我记得有一些缺点,不允许我使用它。我记得甚至将源文件分成单独的包来做到这一点。我将不得不再次尝试刷新我的记忆。排除一切工作在另一个项目中。 –
您有没有机会重试srcDir方法? – RaGe
请注意,Android Gradle插件不会*使用Gradle的默认源(目录)集,但它自己的[AndroidSource(目录)集](https://google.github.io/android-gradle-dsl/current/ com.android.build.gradle.api.AndroidSourceSet.html)实现。因此,引用Gradle源代码在这里可能无效。 – sschuberth