我必须使用不同的源树。在第二个源树中,几个类重写了第一个源树中的tose。它看起来像:
使用Gradle编译时出现错误 错误:(20,8)错误:重复的类:com.companyname.MyClass
有没有办法指定从源树2中取出Class并忽略另一个? 使用exclude不会工作,因为这将删除package和classname指定的所有类。
sourceSets {
main.java.srcDirs += '../../sourcetree-1/'
main.java.srcDirs += '../../sourcetree-2/'
main {
java {
exclude 'com/companyname/MyClass.java'
}
}
}
我需要使用gradle覆盖它们,因为首先来自源树1的类使用java.awt包中的类,我不能在Android项目中使用它们。源树2中的第二个类将覆盖第一个类,而不使用禁用包中的任何类。
不幸的是,我无法使用此类更改源树1或任何其他类中的类。所以我需要覆盖这个类。
答案 0 :(得分:0)
我已经定义了两个不同的源集。
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
seccomdev {
java {
srcDirs '../../SecCommerce-Dev/'
exclude '....'
exclude '....'
exclude '....'
}
}
main {
java {
srcDirs '../../SecCommerce-Android/src/'
srcDirs '../../SecCommerce-Android/gen/'
}
}
}
}
所以问题是如何在编译项目时组合这些源集。 如果你谷歌你会发现类似的东西:
main {
java {
compileClasspath += seccomdev.output
runtimeClasspath += seccomdev.output
}
}
在这种情况下,我收到错误:错误:(122,0)无法获取未知属性' compileClasspath'为......
另一个找到的解决方案是添加依赖项:
dependencies {
compile android.sourceSets.seccomdev
}
但是我收到错误:错误:(134,0)无法将提供的表示法转换为依赖类型的对象:source set seccomdev。
使用类似的东西:
dependencies {
compile files(android.sourceSets.seccomdev.java)
}
我得到:错误:无法将提供的表示法转换为文件或URI:[src / seccomdev / java,.. / .. / SecCommerce-Dev /]。
并使用
dependencies {
seccomdevCompile ':...'
}
至少会编译gradle文件并开始整个编译过程。不幸的是,根本没有编译来自第一个源树/ sourceSet的java文件。所以我得到了数百个错误,因为无法找到第二个源集的java类中的导入。
所以问题仍然是如何在一次编译中将两个不同的源树组合起来,因为代码依赖性?