diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java
index 87b9692..6c50d82 100644
--- a/examples/src/bld/java/com/example/ExamplesBuild.java
+++ b/examples/src/bld/java/com/example/ExamplesBuild.java
@@ -31,11 +31,6 @@ public class ExamplesBuild extends Project {
new ExamplesBuild().start(args);
}
- @Override
- public void compile() throws Exception {
- super.compile();
- jacoco();
- }
@BuildCommand(summary = "Generates Jacoco Reports")
public void jacoco() throws Exception {
diff --git a/src/main/java/rife/bld/extension/JacocoReportOperation.java b/src/main/java/rife/bld/extension/JacocoReportOperation.java
index 1b018cb..13149fb 100644
--- a/src/main/java/rife/bld/extension/JacocoReportOperation.java
+++ b/src/main/java/rife/bld/extension/JacocoReportOperation.java
@@ -26,16 +26,19 @@ import org.jacoco.report.csv.CSVFormatter;
import org.jacoco.report.html.HTMLFormatter;
import org.jacoco.report.xml.XMLFormatter;
import rife.bld.BaseProject;
-import rife.bld.operations.AbstractOperation;
+import rife.bld.dependencies.VersionNumber;
+import rife.bld.operations.JUnitOperation;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
@@ -44,7 +47,8 @@ import java.util.logging.Logger;
* @author Erik C. Thauvin
* @since 1.0
*/
-public class JacocoReportOperation extends AbstractOperation {
+public class JacocoReportOperation extends JUnitOperation {
+ private static final VersionNumber JACOCO_VERSION = new VersionNumber(0, 8, 10);
private static final Logger LOGGER = Logger.getLogger(JacocoReportOperation.class.getName());
private final List classFiles = new ArrayList<>();
private final List execFiles = new ArrayList<>();
@@ -69,10 +73,10 @@ public class JacocoReportOperation extends AbstractOperation classFiles) {
- this.classFiles.addAll(classFiles);
+ public JacocoReportOperation classFiles(File... classFiles) {
+ this.classFiles.addAll(Arrays.stream(classFiles).toList());
return this;
}
@@ -93,31 +97,42 @@ public class JacocoReportOperation extends AbstractOperation execFiles) {
- this.execFiles.addAll(execFiles);
+ public JacocoReportOperation execFiles(File... execFiles) {
+ this.execFiles.addAll(Arrays.stream(execFiles).toList());
return this;
}
/**
* Performs the operation execution that can be wrapped by the {@code #executeOnce} call.
*
- * @throws Exception when an exception occurs during the execution
* @since 1.5.10
*/
@Override
- public void execute() throws Exception {
+ public void execute() throws IOException {
if (project == null && LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.severe("A project must be specified.");
} else {
-
var buildJacocoReportsDir = Path.of(project.buildDirectory().getPath(), "reports", "jacoco", "test").toFile();
+ var buildJacocoExecDir = Path.of(project.buildDirectory().getPath(), "jacoco").toFile();
+ var buildJacocoTestExec = new File(buildJacocoExecDir, "text.exec");
+
+ if (execFiles.isEmpty()) {
+ execFiles.add(buildJacocoTestExec);
+
+ //noinspection ResultOfMethodCallIgnored
+ buildJacocoExecDir.mkdirs();
+
+ javaOptions().javaAgent(new File(project.libBldDirectory(), "org.jacoco.agent-" + JACOCO_VERSION + ".jar"),
+ "destfile=" + buildJacocoTestExec +
+ ",includes=" + classFiles.stream().map(File::toString).collect(Collectors.joining(",")));
+ }
if (sourceFiles.isEmpty()) {
sourceFiles.add(project.srcDirectory());
- //sourceFiles.add(project.srcTestDirectory());
+ sourceFiles.add(project.srcTestDirectory());
}
if (classFiles.isEmpty()) {
@@ -218,11 +233,12 @@ public class JacocoReportOperation extends AbstractOperation sourceFiles) {
- this.sourceFiles.addAll(sourceFiles);
+ public JacocoReportOperation sourceFiles(File... sourceFiles) {
+ this.sourceFiles.addAll(Arrays.stream(sourceFiles).toList());
return this;
}
+
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
private ISourceFileLocator sourceLocator() {
var multi = new MultiSourceFileLocator(tabWidth);