在Gradle项目上添加第二个源文件夹,该项目使用我的Gradle插件

时间:2016-06-24 15:02:04

标签: java gradle android-gradle build.gradle 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文件夹。

我尝试了两种解决方法:

  1. 将sourceSets块添加到build.gradle中,如:
  2. sourceSets { main { java { srcDirs = ['src/main/java', 'target/java'] } } }

    当我尝试gradle build时,:compileDebugJavaWithJavac任务失败,因为src/main/java文件夹中的某些代码需要我生成的代码。但是目标文件夹中的代码似乎没有被编译。

    1. 通过插件代码添加源文件夹
    2. 这是我的插件类(在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相同。

      我实际上不知道为什么这不起作用,有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

该行

+=而不是=

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