Skip to content

Commit 48e79d3

Browse files
Michael MacKinnonMichael MacKinnon
authored andcommitted
Modified the Maven plugin to allow scanning of projects which lack a root-level POM file.
RefactorFirstMavenReport - Set requiresProject parameter to false. A true value will result in MissingProjectException being thrown if no root-level POM file is present. A falsy value is required to enable scanning of projects without a root-level POM file. - Added check (starting line 133) for default project name & substitution. The MavenProject dependency will use a default project name of "Maven Sub Project (No POM)" if a root-level POM file is not present. If that name is detected, replace it with the name of the project's root directory. - Added handling (starting line 202) for an upstream bug in MavenProject dependency. This class's getBasedir method returns null instead of a File instance if no POM file is present in the proejct's root dir. This, in turn, was causing a chained getPath call to fail. Added a check to see if a getBasedir call returns null, and set projectBasedir conditionally. RefactorFirstMavenCsvReport - Set requiresProject parameter to false. - Added check (starting line 79) for default project name & substitutio. - Added handling (starting line 89) for an upstream bug in MavenProject dependency. ReportWriter - In the absence of a root-level POM file, the MavenProject class was returning "${project.basedir}/target/site" as the output directory. Added call to replace to scrub the output directory of the default. RefactorFirstMavenJsonReport - Added handling (starting line 41) for an upstream bug in MavenProject dependency. Tested these changes in the following scenarios, all of which produce expected/correct behaviour: - projects containing a root-level POM file - projects lacking any POM files - projects without a root-level POM, but containing sub-projects which DO have their own POM files
1 parent 866279b commit 48e79d3

File tree

4 files changed

+53
-18
lines changed

4 files changed

+53
-18
lines changed

refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstJsonReport/RefactorFirstMavenJsonReport.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
import com.fasterxml.jackson.core.JsonProcessingException;
66
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import java.io.File;
8+
import java.nio.file.Paths;
79
import java.util.ArrayList;
810
import java.util.Collections;
911
import java.util.List;
@@ -36,7 +38,14 @@ public class RefactorFirstMavenJsonReport extends AbstractMojo {
3638

3739
@Override
3840
public void execute() {
39-
final String projectBaseDir = project.getBasedir().getPath();
41+
String projectBaseDir;
42+
43+
File baseDir = project.getBasedir();
44+
if (baseDir != null) {
45+
projectBaseDir = baseDir.getPath();
46+
} else {
47+
projectBaseDir = Paths.get("").toAbsolutePath().toString();
48+
}
4049

4150
final CostBenefitCalculator costBenefitCalculator = new CostBenefitCalculator();
4251
final List<RankedDisharmony> rankedDisharmonies =

refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenCsvReport.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33
import static org.hjug.mavenreport.ReportWriter.writeReportToDisk;
44

55
import java.io.File;
6+
import java.nio.file.Paths;
67
import java.time.Instant;
78
import java.time.ZoneId;
89
import java.time.format.DateTimeFormatter;
9-
import java.util.Comparator;
10-
import java.util.List;
11-
import java.util.Locale;
12-
import java.util.Optional;
10+
import java.util.*;
1311
import lombok.extern.slf4j.Slf4j;
1412
import org.apache.maven.plugin.AbstractMojo;
1513
import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -26,7 +24,7 @@
2624
name = "csvreport",
2725
defaultPhase = LifecyclePhase.SITE,
2826
requiresDependencyResolution = ResolutionScope.RUNTIME,
29-
requiresProject = true,
27+
requiresProject = false,
3028
threadSafe = true,
3129
inheritByDefault = false)
3230
public class RefactorFirstMavenCsvReport extends AbstractMojo {
@@ -78,16 +76,30 @@ public void execute() {
7876
.append(".csv");
7977
String filename = fileNameSB.toString();
8078

79+
if (Objects.equals(project.getName(), "Maven Stub Project (No POM)")) {
80+
projectName = new File(Paths.get("").toAbsolutePath().toString()).getName();
81+
}
82+
8183
log.info("Generating {} for {} - {} date: {}", filename, projectName, projectVersion, publishedDate);
8284

8385
StringBuilder contentBuilder = new StringBuilder();
8486

8587
// git management
8688
GitLogReader gitLogReader = new GitLogReader();
87-
String projectBaseDir = project.getBasedir().getPath();
88-
Optional<File> optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(project.getBasedir()));
89-
File gitDir;
89+
String projectBaseDir;
90+
Optional<File> optionalGitDir;
9091

92+
File baseDir = project.getBasedir();
93+
if (baseDir != null) {
94+
projectBaseDir = baseDir.getPath();
95+
optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(baseDir));
96+
} else {
97+
// TODO: ensure File is initialized to the project root directory, not PWD
98+
projectBaseDir = Paths.get("").toAbsolutePath().toString();
99+
optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(new File(projectBaseDir)));
100+
}
101+
102+
File gitDir;
91103
if (optionalGitDir.isPresent()) {
92104
gitDir = optionalGitDir.get();
93105
} else {

refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/RefactorFirstMavenReport.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
import java.io.File;
77
import java.io.FileWriter;
88
import java.io.IOException;
9+
import java.nio.file.Paths;
910
import java.time.Instant;
1011
import java.time.ZoneId;
1112
import java.time.format.DateTimeFormatter;
1213
import java.time.format.FormatStyle;
13-
import java.util.Comparator;
14-
import java.util.List;
15-
import java.util.Locale;
16-
import java.util.Optional;
14+
import java.util.*;
1715
import lombok.extern.slf4j.Slf4j;
1816
import org.apache.maven.plugin.AbstractMojo;
1917
import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -31,7 +29,7 @@
3129
name = "report",
3230
defaultPhase = LifecyclePhase.SITE,
3331
requiresDependencyResolution = ResolutionScope.RUNTIME,
34-
requiresProject = true,
32+
requiresProject = false,
3533
threadSafe = true,
3634
inheritByDefault = false)
3735
public class RefactorFirstMavenReport extends AbstractMojo {
@@ -132,6 +130,10 @@ public void execute() {
132130

133131
String filename = getOutputName() + ".html";
134132

133+
if (Objects.equals(project.getName(), "Maven Stub Project (No POM)")) {
134+
projectName = new File(Paths.get("").toAbsolutePath().toString()).getName();
135+
}
136+
135137
log.info("Generating {} for {} - {}", filename, projectName, projectVersion);
136138

137139
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
@@ -197,10 +199,19 @@ public void execute() {
197199
.append("<div id=\"series_chart_div\"></div>");
198200

199201
GitLogReader gitLogReader = new GitLogReader();
200-
String projectBaseDir = project.getBasedir().getPath();
201-
Optional<File> optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(project.getBasedir()));
202-
File gitDir;
202+
String projectBaseDir;
203+
Optional<File> optionalGitDir;
203204

205+
File baseDir = project.getBasedir();
206+
if (baseDir != null) {
207+
projectBaseDir = baseDir.getPath();
208+
optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(baseDir));
209+
} else {
210+
projectBaseDir = Paths.get("").toAbsolutePath().toString();
211+
optionalGitDir = Optional.ofNullable(gitLogReader.getGitDir(new File(projectBaseDir)));
212+
}
213+
214+
File gitDir;
204215
if (optionalGitDir.isPresent()) {
205216
gitDir = optionalGitDir.get();
206217
} else {

refactor-first-maven-plugin/src/main/java/org/hjug/mavenreport/ReportWriter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
public class ReportWriter {
1313
public static void writeReportToDisk(
1414
final MavenProject project, final String filename, final StringBuilder stringBuilder) {
15-
final String reportOutputDirectory = project.getModel().getReporting().getOutputDirectory();
15+
final String reportOutputDirectory = project.getModel()
16+
.getReporting()
17+
.getOutputDirectory()
18+
.replace("${project.basedir}" + File.separator, "");
1619
final File reportOutputDir = new File(reportOutputDirectory);
1720

1821
if (!reportOutputDir.exists()) {

0 commit comments

Comments
 (0)