在使用我的 Gradle 插件的 Gradle 项目上添加第二个源文件夹
Add a 2nd source folder on a Gradle project which uses my Gradle plugin
我创建了一个 Gradle 插件,它生成了一些我们想要的 Java 代码。
我在一个测试项目上测试了我的插件,它运行良好,文件生成正确。
现在我必须在我工作的项目上应用我的插件,为此我在项目的 build.gradle
中添加了以下行:
buildscript {
repositories {
[...]
mavenLocal() <--
}
dependencies {
[...]
classpath 'my.plugin.path:app:1.0' <-- the maven local path of my plugin
}
}
apply plugin: 'myPlugin' <--
然后,我的插件生成的文件被放入src
文件夹中。在这种情况下,项目构建正确。
但是,我想将生成的文件放入 target
文件夹。
我尝试了两种方法来解决它:
- 将 sourceSets 块添加到
build.gradle
中,例如:
sourceSets {
main {
java {
srcDirs = ['src/main/java', 'target/java']
}
}
}
当我尝试 gradle build
时,:compileDebugJavaWithJavac
任务失败,因为 src/main/java
文件夹中的某些代码需要我生成的代码。但是target文件夹里的代码貌似编译不了
- 通过插件代码添加源文件夹
这是我的插件 class(在 Groovy 中):
import com.android.build.gradle.AppPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def hasAppPlugin = project.plugins.hasPlugin AppPlugin
project.afterEvaluate({
def variants = hasAppPlugin ? project.android.applicationVariants : project.android.libraryVariants
variants.all { variant ->
def compileJavaTask = variant.javaCompile
[...] // Adds tasks to the plugins
compileJavaTask.source = project.files("${project.rootDir}/target/java", output)
compileJavaTask.dependsOn javaTask
}
})
}
}
最后两行应该足够了,但我遇到了与情况 1 相同的问题。
我真的不知道为什么这不起作用,有人知道吗?
+=
代替=
就行了:
compileJavaTask.source += project.files("${project.rootDir}/target/java", output)
我创建了一个 Gradle 插件,它生成了一些我们想要的 Java 代码。
我在一个测试项目上测试了我的插件,它运行良好,文件生成正确。
现在我必须在我工作的项目上应用我的插件,为此我在项目的 build.gradle
中添加了以下行:
buildscript {
repositories {
[...]
mavenLocal() <--
}
dependencies {
[...]
classpath 'my.plugin.path:app:1.0' <-- the maven local path of my plugin
}
}
apply plugin: 'myPlugin' <--
然后,我的插件生成的文件被放入src
文件夹中。在这种情况下,项目构建正确。
但是,我想将生成的文件放入 target
文件夹。
我尝试了两种方法来解决它:
- 将 sourceSets 块添加到
build.gradle
中,例如:
sourceSets {
main {
java {
srcDirs = ['src/main/java', 'target/java']
}
}
}
当我尝试 gradle build
时,:compileDebugJavaWithJavac
任务失败,因为 src/main/java
文件夹中的某些代码需要我生成的代码。但是target文件夹里的代码貌似编译不了
- 通过插件代码添加源文件夹
这是我的插件 class(在 Groovy 中):
import com.android.build.gradle.AppPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def hasAppPlugin = project.plugins.hasPlugin AppPlugin
project.afterEvaluate({
def variants = hasAppPlugin ? project.android.applicationVariants : project.android.libraryVariants
variants.all { variant ->
def compileJavaTask = variant.javaCompile
[...] // Adds tasks to the plugins
compileJavaTask.source = project.files("${project.rootDir}/target/java", output)
compileJavaTask.dependsOn javaTask
}
})
}
}
最后两行应该足够了,但我遇到了与情况 1 相同的问题。
我真的不知道为什么这不起作用,有人知道吗?
+=
代替=
就行了:
compileJavaTask.source += project.files("${project.rootDir}/target/java", output)