2016-06-24 44 views
0

我創建了一個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文件夾。

我嘗試了兩種方法來解決這個問題:

  1. 添加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.

    我其實不知道爲什麼這不起作用,有人有任何想法?

    +0

    我無法測試的答案本週結束,這是工作,但我會留意你的答案 –

    回答

    0

    +=,而不是=就行了:

    compileJavaTask.source += project.files("${project.rootDir}/target/java", output) 
    
    相關問題