Example #1
0
  private void configureSourceSetDefaults(final JavaPluginConvention pluginConvention) {
    final Project project = pluginConvention.getProject();
    final ProjectSourceSet projectSourceSet =
        project.getExtensions().getByType(ProjectSourceSet.class);

    pluginConvention
        .getSourceSets()
        .all(
            new Action<SourceSet>() {
              public void execute(final SourceSet sourceSet) {
                ConventionMapping outputConventionMapping =
                    ((IConventionAware) sourceSet.getOutput()).getConventionMapping();

                ConfigurationContainer configurations = project.getConfigurations();

                Configuration compileConfiguration =
                    configurations.findByName(sourceSet.getCompileConfigurationName());
                if (compileConfiguration == null) {
                  compileConfiguration =
                      configurations.add(sourceSet.getCompileConfigurationName());
                }
                compileConfiguration.setVisible(false);
                compileConfiguration.setDescription(
                    String.format("Classpath for compiling the %s sources.", sourceSet.getName()));

                Configuration runtimeConfiguration =
                    configurations.findByName(sourceSet.getRuntimeConfigurationName());
                if (runtimeConfiguration == null) {
                  runtimeConfiguration =
                      configurations.add(sourceSet.getRuntimeConfigurationName());
                }
                runtimeConfiguration.setVisible(false);
                runtimeConfiguration.extendsFrom(compileConfiguration);
                runtimeConfiguration.setDescription(
                    String.format(
                        "Classpath for running the compiled %s classes.", sourceSet.getName()));

                sourceSet.setCompileClasspath(compileConfiguration);
                sourceSet.setRuntimeClasspath(sourceSet.getOutput().plus(runtimeConfiguration));

                outputConventionMapping.map(
                    "classesDir",
                    new Callable<Object>() {
                      public Object call() throws Exception {
                        String classesDirName = String.format("classes/%s", sourceSet.getName());
                        return new File(project.getBuildDir(), classesDirName);
                      }
                    });
                outputConventionMapping.map(
                    "resourcesDir",
                    new Callable<Object>() {
                      public Object call() throws Exception {
                        String classesDirName = String.format("resources/%s", sourceSet.getName());
                        return new File(project.getBuildDir(), classesDirName);
                      }
                    });

                sourceSet.getJava().srcDir(String.format("src/%s/java", sourceSet.getName()));
                sourceSet
                    .getResources()
                    .srcDir(String.format("src/%s/resources", sourceSet.getName()));
                sourceSet.compiledBy(sourceSet.getClassesTaskName());

                FunctionalSourceSet functionalSourceSet =
                    projectSourceSet.create(sourceSet.getName());
                Classpath compileClasspath = new SourceSetCompileClasspath(sourceSet);
                DefaultJavaSourceSet javaSourceSet =
                    instantiator.newInstance(
                        DefaultJavaSourceSet.class,
                        "java",
                        sourceSet.getJava(),
                        compileClasspath,
                        functionalSourceSet);
                functionalSourceSet.add(javaSourceSet);
                ResourceSet resourceSet =
                    instantiator.newInstance(
                        DefaultResourceSet.class,
                        "resources",
                        sourceSet.getResources(),
                        functionalSourceSet);
                functionalSourceSet.add(resourceSet);

                JvmBinaryContainer jvmBinaryContainer =
                    project.getPlugins().getPlugin(JvmLanguagePlugin.class).getJvmBinaryContainer();
                ClassDirectoryBinary binary =
                    jvmBinaryContainer.create(sourceSet.getName(), ClassDirectoryBinary.class);
                ConventionMapping conventionMapping = new DslObject(binary).getConventionMapping();
                conventionMapping.map(
                    "classesDir",
                    new Callable<File>() {
                      public File call() throws Exception {
                        return sourceSet.getOutput().getClassesDir();
                      }
                    });
                conventionMapping.map(
                    "resourcesDir",
                    new Callable<File>() {
                      public File call() throws Exception {
                        return sourceSet.getOutput().getResourcesDir();
                      }
                    });

                binary.getSource().add(javaSourceSet);
                binary.getSource().add(resourceSet);

                binary.getClassesTask().dependsOn(sourceSet.getOutput().getDirs());
              }
            });
  }