如何在Gradle2.1中向Java项目添加源代码集?

如何在Gradle2.1中向Java项目添加源代码集?,java,gradle,gradle-2,Java,Gradle,Gradle 2,如何在Gradle2.1中向Java项目添加源代码集 我已经阅读了和上的文档以及其他一些SO线程,我仍然在努力弄清楚它是如何工作的 我创建了一个简单的构建脚本来测试我的理解。根据《用户指南》第23.7.2节示例23.5,我似乎可以通过以下操作创建源集: sourceSets { generated } 在第23.4节中。项目布局似乎意味着我只需要做这些,因为我的源代码集遵循gradle约定。要包含在源集中的代码位于src/generated/java/packagename中。并将自动添

如何在Gradle2.1中向Java项目添加源代码集

我已经阅读了和上的文档以及其他一些SO线程,我仍然在努力弄清楚它是如何工作的

我创建了一个简单的构建脚本来测试我的理解。根据《用户指南》第23.7.2节示例23.5,我似乎可以通过以下操作创建源集:

sourceSets {
   generated
}
在第23.4节中。项目布局似乎意味着我只需要做这些,因为我的源代码集遵循gradle约定。要包含在源集中的代码位于src/generated/java/packagename中。并将自动添加到类路径中。基于我从使用生成的源代码集中定义的代码中得到的符号not found错误,我假设这是不正确的,需要做一些其他事情。我需要做什么

以下是我的设置:

build.gradle

apply plugin: 'java'
apply plugin: 'application'

mainClassName = "tester.Test"

sourceSets {
    generated
}
tester/
├── build
│   ├── classes
│   │   └── main
│   ├── dependency-cache
│   └── tmp
│       └── compileJava
├── build.gradle
└── src
    ├── generated
    │   └── java
    │       └── tester
    │           └── Boom.java
    └── main
        └── java
            └── tester
                └── Test.java
文件结构

apply plugin: 'java'
apply plugin: 'application'

mainClassName = "tester.Test"

sourceSets {
    generated
}
tester/
├── build
│   ├── classes
│   │   └── main
│   ├── dependency-cache
│   └── tmp
│       └── compileJava
├── build.gradle
└── src
    ├── generated
    │   └── java
    │       └── tester
    │           └── Boom.java
    └── main
        └── java
            └── tester
                └── Test.java
Boom.java

package tester;

class Boom {
   String sound;

   public Boom (String s){
      sound = s;
   }
}
package tester;

class Test {
   public static void main(String[] args) {
      Boom b = new Boom("KABOOM");

      System.out.println("I've run");
      System.out.println(b.sound);
   }
}
Test.java

package tester;

class Boom {
   String sound;

   public Boom (String s){
      sound = s;
   }
}
package tester;

class Test {
   public static void main(String[] args) {
      Boom b = new Boom("KABOOM");

      System.out.println("I've run");
      System.out.println(b.sound);
   }
}

您需要按以下方式修改
build.gradle

sourceSets {
    generated
    main {
        compileClasspath += generated.output  // adds the sourceSet to the compileClassPath
        runtimeClasspath += generated.output  // adds the sourceSet to the runtimeClasspath
    }
}

project.run.classpath += sourceSets.generated.output //add the sourceSet to project class path
请记住,添加新的源代码集与在类路径中编译源代码集是不同的


源代码集下面的行是运行任务所必需的。

谢谢!这适用于
gradle build
,但是,当我尝试
gradle run
时,它会给我一个
NoClassDefFoundError
.Hmm。。的确我也用
run
测试了它,但不幸的是没有
clean
。我学到的是:从概念上讲,源集是围绕代码集合的框。即使您正在使用java插件,您仍然需要告诉gradle如何使用这些信息。使用源代码集可以分别编译/测试代码集合。要在项目中使用它,您需要告诉gradle如何使用它。一个例子见上面的答案。谢谢@Opal!是的,但请注意,并非所有运行时类路径都是可修改的——其中一些是无法更改的。gradle还附带了一些合理的默认设置,如果你做了一些超出默认使用范围的事情,你需要告诉gradle。好的方面。你知道我在哪里可以找到
项目
在类路径上包含的详细信息吗?因为我们在讨论,如果我添加了测试,我是否也需要将“生成的”源集添加到测试源集的路径中?