@Override public FileCollection call() { ConfigurableFileTree fileTree = StreamSupport.stream(sourceSet.getOutput().getClassesDirs().spliterator(), false) .map(project::fileTree) .reduce((lhs, rhs) -> { lhs.plus(rhs); return lhs; }).orElseThrow(() -> new InvalidUserDataException("No classes dir configured for source set " + sourceSet.getName()) ); return fileTree.builtBy(sourceSet.getClassesTaskName()); } });
@Override public void apply(Project project) { project.getPluginManager().apply( "java" ); final SnifferExtension snifferExtension = Helper.maybeCreateExtension( project ); final GenerateTask generateTask = project.getTasks().create( GenerateTask.STANDARD_NAME, GenerateTask.class ); final String compileTaskName = project.getConvention().getPlugin( JavaPluginConvention.class ) .getSourceSets() .getByName( "main" ) .getClassesTaskName(); generateTask.dependsOn( project.getTasks().getByName( compileTaskName ) ); } }
private void configureGosuCompile(JavaBasePlugin javaPlugin, SourceSet sourceSet, GosuSourceSet gosuSourceSet) { String compileTaskName = sourceSet.getCompileTaskName("gosu"); GosuCompile gosuCompile = _project.getTasks().create(compileTaskName, GosuCompile.class); javaPlugin.configureForSourceSet(sourceSet, gosuCompile); gosuCompile.dependsOn(sourceSet.getCompileJavaTaskName()); gosuCompile.setDescription("Compiles the " + sourceSet.getName() + " Gosu source"); gosuCompile.setSource(gosuSourceSet.getGosu()); gosuCompile.setSourceRoots(gosuSourceSet.getGosu().getSrcDirs()); _project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(compileTaskName); }
@Override protected void configureForSourceSet(SourceSet sourceSet, NoActionVerificationTask task) { task.setSource(sourceSet.getAllJava()); ConventionMapping taskMapping = task.getConventionMapping(); taskMapping.map("classes", new Callable<FileCollection>() { @Override public FileCollection call() { return project.fileTree(sourceSet.getOutput().getClassesDir()).builtBy(sourceSet.getOutput()); } }); for (Task classesTask : project.getTasksByName(sourceSet.getClassesTaskName(), false)) { classesTask.finalizedBy(task.getPath()); } }
private Task createClassycleTask(final Project project, final ClassycleExtension extension, final SourceSet sourceSet) { final String taskName = sourceSet.getTaskName("classycle", null); final FileCollection classesDirs = sourceSet.getOutput().getClassesDirs(); final File reportFile = getReportingExtension(project).file("classycle_" + sourceSet.getName() + ".txt"); final Task task = project.task(taskName); task.getInputs().files(classesDirs, extension.getDefinitionFile()); task.getOutputs().file(reportFile); task.doLast(new ClassyclePlugin.ClassycleAction(classesDirs, reportFile, extension)); // the classycle task depends on the corresponding classes task final String classesTask = sourceSet.getClassesTaskName(); task.dependsOn(classesTask); if (project.getLogger().isDebugEnabled()) { final StringBuilder sb = new StringBuilder(); for (final File file : classesDirs) { sb.append(file.getAbsolutePath()).append(" "); } project.getLogger() .debug("Created classycle task: " + taskName + ", report file: " + reportFile + ", depends on: " + classesTask + " - sourceSetDirs: " + sb.toString()); } return task; }
@Override protected void configureForSourceSet(final SourceSet sourceSet, SpotBugsTask task) { task.setDescription("Run SpotBugs analysis for " + sourceSet.getName() + " classes"); task.setSourceSet(sourceSet); ConventionMapping taskMapping = task.getConventionMapping(); taskMapping.map("classes", (Callable<FileCollection>) () -> { /* * As a result of the changes made in gradle 4.0. * See https://docs.gradle.org/4.0/release-notes.html - Location of classes in the build directory * Compile no longer bundles all classes in one directory build-gradle/classes/main * but instead separates classes into build-gradle/classes/{language}/main. * * We must therefor retrieve all output directories. Filter away the once that don't exist. Add each * existing file tree dependency to specified task. And then return the complete fileCollection, contain * all .class files available for analysis. */ FileCollection presentClassDirs = sourceSet.getOutput().getClassesDirs().filter(File::exists); StreamSupport.stream(presentClassDirs.spliterator(), false) .map(file -> project.fileTree(file)) .forEach(tree -> tree.builtBy(sourceSet.getClassesTaskName())); return presentClassDirs.getAsFileTree(); }); taskMapping.map("classpath", sourceSet::getRuntimeClasspath); } }
/** * Create and configure default compileGosu and compileTestGosu tasks * Gradle 4.0+: call local equivalent of o.g.a.p.i.SourceSetUtil.configureForSourceSet(sourceSet, gosuSourceSet.getGosu(), gosuCompile, _project) * Gradle 2.x, 3.x: call javaPlugin.configureForSourceSet(sourceSet, gosuCompile); */ private void configureGosuCompile(JavaBasePlugin javaPlugin, SourceSet sourceSet, GosuSourceSet gosuSourceSet) { String compileTaskName = sourceSet.getCompileTaskName("gosu"); GosuCompile gosuCompile = _project.getTasks().create(compileTaskName, GosuCompile.class); VersionNumber gradleVersion = VersionNumber.parse(_project.getGradle().getGradleVersion()); if(gradleVersion.compareTo(VersionNumber.parse("4.0")) >= 0) { //Gradle 4.0+ configureForSourceSet(sourceSet, gosuSourceSet.getGosu(), gosuCompile, _project); } else { javaPlugin.configureForSourceSet(sourceSet, gosuCompile); gosuCompile.setDescription("Compiles the " + gosuSourceSet.getGosu() + "."); } gosuCompile.dependsOn(sourceSet.getCompileJavaTaskName()); gosuCompile.setSource((Object) gosuSourceSet.getGosu()); // Gradle 4.0 overloads setSource; must upcast to Object for backwards compatibility _project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(compileTaskName); }
public void execute(final SourceSet sourceSet) { FregeSourceSetDirectoryFactory factory = new FregeSourceSetDirectoryFactory((ProjectInternal) project, fileResolver); final DefaultFregeSourceSet fregeSourceSet = new DefaultFregeSourceSet(((DefaultSourceSet) sourceSet).getDisplayName(), factory); new DslObject(sourceSet).getConvention().getPlugins().put("frege", fregeSourceSet); final String defaultSourcePath = String.format("src/%s/frege", sourceSet.getName()); fregeSourceSet.getFrege().srcDir(defaultSourcePath); sourceSet.getResources().getFilter().exclude(new Spec<FileTreeElement>() { public boolean isSatisfiedBy(FileTreeElement element) { return fregeSourceSet.getFrege().contains(element.getFile()); } }); sourceSet.getAllJava().source(fregeSourceSet.getFrege()); sourceSet.getAllSource().source(fregeSourceSet.getFrege()); String compileTaskName = sourceSet.getCompileTaskName("frege"); FregeCompile compile = project.getTasks().create(compileTaskName, FregeCompile.class); compile.setModule(project.file(defaultSourcePath).getAbsolutePath()); javaBasePlugin.configureForSourceSet(sourceSet, compile); compile.getConventionMapping().map("fregepath", new Callable() { public Object call() throws Exception { return sourceSet.getCompileClasspath(); } }); compile.dependsOn(sourceSet.getCompileJavaTaskName()); compile.setDescription(String.format("Compiles the %s Frege source.", sourceSet.getName())); compile.setSource(fregeSourceSet.getFrege()); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(compileTaskName); sourceSet.compiledBy(compile); } });
private void configureSourceSetDefaults(Project project, ClojureExtension extension) { project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet -> { ClojureSourceSet clojureSourceSet = new DefaultClojureSourceSet("clojure", sourceDirectorySetFactory); new DslObject(sourceSet).getConvention().getPlugins().put("clojure", clojureSourceSet); clojureSourceSet.getClojure().srcDir(String.format("src/%s/clojure", sourceSet.getName())); // in case the clojure source overlaps with the resources source sourceSet.getResources().getFilter().exclude(element -> clojureSourceSet.getClojure().contains(element.getFile())); sourceSet.getAllSource().source(clojureSourceSet.getClojure()); ClojureBuild build = extension.getBuilds().create(sourceSet.getName()); build.getSourceSet().set(sourceSet); ((DefaultSourceSetOutput) sourceSet.getOutput()).addClassesDir(() -> build.getOutputDir().get().getAsFile()); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("compile")); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("check")); sourceSet.getOutput().dir(project.provider(() -> { if (build.isCompilerConfigured()) { return clojureSourceSet.getClojure().getSourceDirectories(); } else { return build.getOutputDir(); } })); }); }
private void configureSourceSetDefaults(Project project, ClojureExtension extension) { project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet -> { ClojureSourceSet clojureSourceSet = new DefaultClojureSourceSet("clojure", objects); new DslObject(sourceSet).getConvention().getPlugins().put("clojure", clojureSourceSet); clojureSourceSet.getClojure().srcDir(String.format("src/%s/clojure", sourceSet.getName())); // in case the clojure source overlaps with the resources source sourceSet.getResources().getFilter().exclude(element -> clojureSourceSet.getClojure().contains(element.getFile())); sourceSet.getAllSource().source(clojureSourceSet.getClojure()); ClojureBuild build = extension.getBuilds().create(sourceSet.getName()); build.getSourceSet().set(sourceSet); ((DefaultSourceSetOutput) sourceSet.getOutput()).addClassesDir(() -> build.getOutputDir().get().getAsFile()); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("compile")); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("check")); sourceSet.getOutput().dir(project.provider(() -> { if (build.isCompilerConfigured()) { return build.getOutputDir(); } else { return clojureSourceSet.getClojure().getSourceDirectories(); } })); }); }
project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(compile); });
private void configureSourceSetDefaults(Project project, ClojureScriptExtension extension) { project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all((SourceSet sourceSet) -> { ClojureScriptSourceSet clojurescriptSourceSet = new DefaultClojureScriptSourceSet("clojurescript", objects); new DslObject(sourceSet).getConvention().getPlugins().put("clojurescript", clojurescriptSourceSet); clojurescriptSourceSet.getClojureScript().srcDir(String.format("src/%s/clojurescript", sourceSet.getName())); // in case the clojure source overlaps with the resources source sourceSet.getResources().getFilter().exclude(element -> clojurescriptSourceSet.getClojureScript().contains(element.getFile())); sourceSet.getAllSource().source(clojurescriptSourceSet.getClojureScript()); ClojureScriptBuild build = extension.getBuilds().create(sourceSet.getName()); build.getSourceSet().set(sourceSet); sourceSet.getOutput().dir(build.getOutputDir()); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("compile")); sourceSet.getOutput().dir(project.provider(() -> { if (build.isCompilerConfigured()) { return build.getOutputDir(); } else { return clojurescriptSourceSet.getClojureScript().getSourceDirectories(); } })); }); }
private void configureSourceSetDefaults(Project project, ClojureScriptExtension extension) { project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all((SourceSet sourceSet) -> { ClojureScriptSourceSet clojurescriptSourceSet = new DefaultClojureScriptSourceSet("clojurescript", sourceDirectorySetFactory); new DslObject(sourceSet).getConvention().getPlugins().put("clojurescript", clojurescriptSourceSet); clojurescriptSourceSet.getClojureScript().srcDir(String.format("src/%s/clojurescript", sourceSet.getName())); // in case the clojure source overlaps with the resources source sourceSet.getResources().getFilter().exclude(element -> clojurescriptSourceSet.getClojureScript().contains(element.getFile())); sourceSet.getAllSource().source(clojurescriptSourceSet.getClojureScript()); ClojureScriptBuild build = extension.getBuilds().create(sourceSet.getName()); build.getSourceSet().set(sourceSet); sourceSet.getOutput().dir(build.getOutputDir()); project.getTasks().getByName(sourceSet.getClassesTaskName()).dependsOn(build.getTaskName("compile")); sourceSet.getOutput().dir(project.provider(() -> { if (build.isCompilerConfigured()) { return clojurescriptSourceSet.getClojureScript().getSourceDirectories(); } else { return build.getOutputDir(); } })); }); }
(() -> etaSourceDirectorySet.getOutputDir()); project.getTasks().findByName(sourceSet.getClassesTaskName()) .dependsOn(compileTask);