diff --git a/bom/pom.xml b/bom/pom.xml
index 91771d9630..deecb3d0ff 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -12,121 +12,131 @@
-
- ${project.groupId}
+ com.mastercard.test.flow
api
${project.version}
- ${project.groupId}
- builder
+ com.mastercard.test.flow
+ assert-core
${project.version}
- ${project.groupId}
- message-core
+ com.mastercard.test.flow
+ assert-filter
${project.version}
- ${project.groupId}
- message-text
+ com.mastercard.test.flow
+ assert-junit4
${project.version}
- ${project.groupId}
- message-json
+ com.mastercard.test.flow
+ assert-junit5
${project.version}
- ${project.groupId}
- message-http
+ com.mastercard.test.flow
+ builder
${project.version}
- ${project.groupId}
- message-sql
+ com.mastercard.test.flow
+ coppice
${project.version}
- ${project.groupId}
- message-web
+ com.mastercard.test.flow
+ duct
${project.version}
- ${project.groupId}
- message-xml
+ com.mastercard.test.flow
+ message-core
${project.version}
- ${project.groupId}
- model
+ com.mastercard.test.flow
+ message-http
${project.version}
- ${project.groupId}
- validation-core
+ com.mastercard.test.flow
+ message-json
${project.version}
- ${project.groupId}
- validation-junit4
+ com.mastercard.test.flow
+ message-sql
${project.version}
- ${project.groupId}
- validation-junit5
+ com.mastercard.test.flow
+ message-text
${project.version}
- ${project.groupId}
- coppice
+ com.mastercard.test.flow
+ message-web
${project.version}
- ${project.groupId}
- report-core
+ com.mastercard.test.flow
+ message-xml
${project.version}
- ${project.groupId}
- assert-filter
+ com.mastercard.test.flow
+ model
${project.version}
- ${project.groupId}
- assert-core
+ com.mastercard.test.flow
+ report-core
${project.version}
- ${project.groupId}
- assert-junit4
+ com.mastercard.test.flow
+ report-ng
${project.version}
- ${project.groupId}
- assert-junit5
+ com.mastercard.test.flow
+ validation-core
${project.version}
+
+ com.mastercard.test.flow
+ validation-junit4
+ ${project.version}
+
+
+
+ com.mastercard.test.flow
+ validation-junit5
+ ${project.version}
+
diff --git a/doc/src/test/java/com/mastercard/test/flow/doc/BomTest.java b/doc/src/test/java/com/mastercard/test/flow/doc/BomTest.java
new file mode 100644
index 0000000000..3fc5c34a54
--- /dev/null
+++ b/doc/src/test/java/com/mastercard/test/flow/doc/BomTest.java
@@ -0,0 +1,87 @@
+package com.mastercard.test.flow.doc;
+
+import static java.util.stream.Collectors.joining;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+import com.mastercard.test.flow.doc.PomData.DepData;
+
+/**
+ * Ensures that our Bill of Materials pom contains all of the artifacts in this
+ * project
+ */
+class BomTest {
+
+ @Test
+ void check() {
+ PomData root = new PomData( null, Paths.get( "..", "pom.xml" ) );
+
+ PomData bom = root.modules()
+ .filter( m -> "bom".equals( m.artifactId() ) )
+ .findAny()
+ .orElseThrow( () -> new IllegalStateException( "Failed to find bom" ) );
+
+ List artifacts = collectArtifacts( root, new ArrayList<>() );
+
+ // these are not releasable artifacts, so no point in managing them
+ artifacts.removeIf( pom -> pom.groupId().endsWith( "example" )
+ || "aggregator".equals( pom.artifactId() )
+ || "doc".equals( pom.artifactId() ) );
+ // no self-reference please
+ artifacts.remove( bom );
+
+ String expected = artifacts.stream()
+ .sorted( Comparator.comparing( PomData::artifactId ) )
+ .map( artifact -> String.format( ""
+ + "\t\t\t\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t",
+ artifact.groupId(), artifact.artifactId(), artifact.version() ) )
+ .collect( joining(
+ "\n\n",
+ ""
+ + "\t\n"
+ + "\t\t\n",
+ ""
+ + "\n"
+ + "\t\t\n"
+ + "\t" ) );
+
+ String actual = bom.dependencyManagement()
+ .sorted( Comparator.comparing( DepData::artifactId ) )
+ .map( dep -> String.format( ""
+ + "\t\t\t\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t\t%s\n"
+ + "\t\t\t",
+ dep.groupId(), dep.artifactId(), dep.version() ) )
+ .collect( joining(
+ "\n\n",
+ ""
+ + "\t\n"
+ + "\t\t\n",
+ ""
+ + "\n"
+ + "\t\t\n"
+ + "\t" ) );
+
+ assertEquals( expected, actual );
+ }
+
+ private static List collectArtifacts( PomData pom, List modules ) {
+ if( "jar".equals( pom.packaging() ) ) {
+ modules.add( pom );
+ }
+ pom.modules().forEach( child -> collectArtifacts( child, modules ) );
+ return modules;
+ }
+}
diff --git a/doc/src/test/java/com/mastercard/test/flow/doc/PomData.java b/doc/src/test/java/com/mastercard/test/flow/doc/PomData.java
index a6e79d1c4d..bc6a352351 100644
--- a/doc/src/test/java/com/mastercard/test/flow/doc/PomData.java
+++ b/doc/src/test/java/com/mastercard/test/flow/doc/PomData.java
@@ -30,11 +30,13 @@ class PomData {
private final Path dirPath;
private final String groupId;
private final String artifactId;
+ private final String version;
private final String packaging;
private final String name;
private final String description;
private final List modules;
private final List dependencies;
+ private final List dependencyManagement;
/**
* @param parent The parent pom, or null
@@ -54,6 +56,9 @@ class PomData {
groupId = Optional.ofNullable( xpath.evaluate( "/project/groupId", doc ) )
.filter( s -> !s.isEmpty() )
.orElseGet( () -> parent.groupId() );
+ version = Optional.of( xpath.evaluate( "/project/version", doc ) )
+ .filter( s -> !s.isEmpty() )
+ .orElse( "${project.version}" );
packaging = xpath.evaluate( "/project/packaging", doc );
name = xpath.evaluate( "/project/name", doc );
description = xpath.evaluate( "/project/description", doc );
@@ -75,6 +80,14 @@ class PomData {
for( int i = 0; i < dnl.getLength(); i++ ) {
dependencies.add( new DepData( xpath, dnl.item( i ), this ) );
}
+
+ dependencyManagement = new ArrayList<>();
+ NodeList dpnl = (NodeList) xpath.evaluate(
+ "/project/dependencyManagement/dependencies/dependency", doc,
+ XPathConstants.NODESET );
+ for( int i = 0; i < dpnl.getLength(); i++ ) {
+ dependencyManagement.add( new DepData( xpath, dpnl.item( i ), this ) );
+ }
}
catch( ParserConfigurationException
| SAXException
@@ -112,10 +125,17 @@ public String groupId() {
return groupId;
}
+ /**
+ * @return The project's version string
+ */
+ public String version() {
+ return version;
+ }
+
/**
* @return The project's packaging value
*/
- public String getPackaging() {
+ public String packaging() {
return packaging;
}
@@ -140,6 +160,13 @@ public Stream dependencies() {
return dependencies.stream();
}
+ /**
+ * @return managed dependencies
+ */
+ public Stream dependencyManagement() {
+ return dependencyManagement.stream();
+ }
+
/**
* @return Project name
*/
@@ -175,6 +202,7 @@ public String toString() {
public static class DepData {
private final String groupId;
private final String artifactId;
+ private final String version;
private final String scope;
private final boolean optional;
@@ -193,6 +221,7 @@ public static class DepData {
groupId = gd;
}
artifactId = xpath.evaluate( "artifactId", n );
+ version = xpath.evaluate( "version", n );
scope = Optional.ofNullable( xpath.evaluate( "scope", n ) )
.filter( s -> !s.isEmpty() )
.orElse( "compile" );
@@ -215,6 +244,13 @@ public String artifactId() {
return artifactId;
}
+ /**
+ * @return The dependency version string
+ */
+ public String version() {
+ return version;
+ }
+
/**
* @return commbined group and artifact IDs
*/
diff --git a/doc/src/test/java/com/mastercard/test/flow/doc/ReadmeInterlinkTest.java b/doc/src/test/java/com/mastercard/test/flow/doc/ReadmeInterlinkTest.java
index a9ed70d761..b9e424decc 100644
--- a/doc/src/test/java/com/mastercard/test/flow/doc/ReadmeInterlinkTest.java
+++ b/doc/src/test/java/com/mastercard/test/flow/doc/ReadmeInterlinkTest.java
@@ -80,7 +80,7 @@ private static String parentLink( PomData pom ) {
.collect( toSet() );
private static String javadocBadge( PomData pom ) {
- if( "jar".equals( pom.getPackaging() ) && !NO_JAVADOC.contains( pom.artifactId() ) ) {
+ if( "jar".equals( pom.packaging() ) && !NO_JAVADOC.contains( pom.artifactId() ) ) {
return String.format( ""
+ "["
+ "![javadoc](https://javadoc.io/badge2/%s/%s/javadoc.svg)"
diff --git a/message/message-core/pom.xml b/message/message-core/pom.xml
index 16c1975b0c..813d6e3caf 100644
--- a/message/message-core/pom.xml
+++ b/message/message-core/pom.xml
@@ -14,6 +14,7 @@
${project.groupId}
api
+ ${project.version}
diff --git a/message/pom.xml b/message/pom.xml
index 5832368e8e..1745063124 100644
--- a/message/pom.xml
+++ b/message/pom.xml
@@ -20,20 +20,10 @@
message-xml
-
-
-
- ${project.groupId}
- api
- ${project.version}
-
-
-
-
-
+
net.revelc.code.formatter