我創建了一個Gradle插件,它可以生成我們想要的一些Java代碼。在使用我的Gradle插件的Gradle項目中添加第二個源文件夾
我在一個測試項目上測試了我的插件,它工作完美,文件正確生成。
現在我已經應用在我工作的項目我的插件,這樣做我添加以下行項目的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
文件夾中的某些代碼需要我生成的代碼。但目標文件夾中的代碼似乎未被編譯。
- 通過插件代碼
這裏添加源文件夾是我的插件類(在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
}
})
}
}
的2分最後幾行應足夠,但我有同樣的問題比情況下1.
我其實不知道爲什麼這不起作用,有人有任何想法?
我無法測試的答案本週結束,這是工作,但我會留意你的答案 –