如何从 gradle 插件向 android 项目源集添加文件夹
How to add a folder to an android project sourceset from a gradle plugin
我正在为 gradle 编写插件,为 Android 项目生成一些 classes。
我在项目 src/gen/java
文件夹中生成那些 classes,因为我不希望它们与真正的源代码混合。
从项目的 build.gradle
配置中,我可以添加它以使构建工具看到生成的 classes:
android {
sourceSets {
main {
java {
srcDir 'src/gen/java'
}
}
}
}
问题是我想让我的插件自动设置它。在我的插件中,我尝试了以下操作:
public class MyPlugin 实现插件 {
@Override
public void apply(Project project) {
// ...
// TEST 1 : doesnt work
project.android.sourceSets.main.java.srcDirs += "src/gen/java"
// TEST 2 : doesnt work
project.android.sourceSets {
main {
java {
srcDir 'src/gen/java'
}
}
}
}
}
每次插件都可以运行,但是编译器仍然看不到该文件夹,编译时找不到生成的classes。有人知道从插件中执行此操作的另一种方法吗?
如果您将文件移动到应用模块的 build/generated/sources
目录,插件当前正在为您生成代码,那么您不必将其添加到源集中。
你也可以看看SQLDelight which is also a gradle plugin which does code generation or AutoValue
编辑:
您还需要在将生成源代码的 BuildVariant 上调用 registerJavaGeneratingTask
我正在为 gradle 编写插件,为 Android 项目生成一些 classes。
我在项目 src/gen/java
文件夹中生成那些 classes,因为我不希望它们与真正的源代码混合。
从项目的 build.gradle
配置中,我可以添加它以使构建工具看到生成的 classes:
android {
sourceSets {
main {
java {
srcDir 'src/gen/java'
}
}
}
}
问题是我想让我的插件自动设置它。在我的插件中,我尝试了以下操作:
public class MyPlugin 实现插件 {
@Override
public void apply(Project project) {
// ...
// TEST 1 : doesnt work
project.android.sourceSets.main.java.srcDirs += "src/gen/java"
// TEST 2 : doesnt work
project.android.sourceSets {
main {
java {
srcDir 'src/gen/java'
}
}
}
}
}
每次插件都可以运行,但是编译器仍然看不到该文件夹,编译时找不到生成的classes。有人知道从插件中执行此操作的另一种方法吗?
如果您将文件移动到应用模块的 build/generated/sources
目录,插件当前正在为您生成代码,那么您不必将其添加到源集中。
你也可以看看SQLDelight which is also a gradle plugin which does code generation or AutoValue
编辑:
您还需要在将生成源代码的 BuildVariant 上调用 registerJavaGeneratingTask