diff --git a/plugin/src/main/scala/com/here/bom/Bom.scala b/plugin/src/main/scala/com/here/bom/Bom.scala
index 26ded1e..ebf1550 100644
--- a/plugin/src/main/scala/com/here/bom/Bom.scala
+++ b/plugin/src/main/scala/com/here/bom/Bom.scala
@@ -55,6 +55,10 @@ object Bom {
}
}
+ def dependencies(bomArtifact: ModuleID): Def.Setting[Seq[ModuleID]] = {
+ read(bomArtifact)(bom => bom.bomDependencies)
+ }
+
implicit def addBomSyntax(dep: OrganizationArtifactName): BomSyntax = new BomSyntax(dep)
class BomSyntax(dep: OrganizationArtifactName) {
@@ -85,4 +89,9 @@ object Bom {
trait Bom {
def version(dependency: OrganizationArtifactName): String
+
+ /**
+ * List of all dependencies declared in the BOM
+ */
+ def bomDependencies: Seq[ModuleID]
}
diff --git a/plugin/src/main/scala/com/here/bom/internal/BomReader.scala b/plugin/src/main/scala/com/here/bom/internal/BomReader.scala
index 25c354c..230cb01 100644
--- a/plugin/src/main/scala/com/here/bom/internal/BomReader.scala
+++ b/plugin/src/main/scala/com/here/bom/internal/BomReader.scala
@@ -155,6 +155,13 @@ class BomReader(pomLocator: IvyPomLocator, logger: Logger, scalaBinaryVersion: S
sys.error(s"Version for ${normalized.group}.${normalized.name} not found in BOM")
)
}
+
+ override def bomDependencies: Seq[ModuleID] = {
+ effectiveVersions.map { case ((group, name), version) =>
+ ModuleID(group, name, version)
+ }.toSeq
+ }
+
}
}
diff --git a/plugin/src/test/scala/com/here/bom/internal/BomReaderSpec.scala b/plugin/src/test/scala/com/here/bom/internal/BomReaderSpec.scala
index 790bda3..b0652ae 100644
--- a/plugin/src/test/scala/com/here/bom/internal/BomReaderSpec.scala
+++ b/plugin/src/test/scala/com/here/bom/internal/BomReaderSpec.scala
@@ -44,6 +44,8 @@ class BomReaderSpec extends AnyFlatSpec with Matchers with MockFactory {
val dependency = "com.test" %% "test_module" % bom
dependency.revision should be("1.0")
+
+ bom.bomDependencies shouldBe Seq("com.test" % "test_module_2.12" % "1.0")
}
"BomReader" should "assemble the BOM correctly with parent" in {
@@ -55,13 +57,15 @@ class BomReaderSpec extends AnyFlatSpec with Matchers with MockFactory {
(pomLocatorMock.getPomFile _)
.expects(where((moduleId: NormalizedArtifact) => {
- moduleId.group.equals("com.test") && moduleId.name.equals("test_bom_parent") && moduleId.version.equals("1.0")
+ moduleId.group.equals("com.test") && moduleId.name
+ .equals("test_bom_parent") && moduleId.version.equals("1.0")
}))
.returns(Some(createMockPomFile("com.test", "test_bom_parent", "1.0", false)))
(pomLocatorMock.getPomFile _)
.expects(where((moduleId: NormalizedArtifact) => {
- moduleId.group.equals("com.test") && moduleId.name.equals("test_bom") && moduleId.version.equals("1.0")
+ moduleId.group.equals("com.test") && moduleId.name.equals("test_bom") && moduleId.version
+ .equals("1.0")
}))
.returns(Some(createMockPomFile("com.test", "test_bom", "1.0", true)))
@@ -70,9 +74,16 @@ class BomReaderSpec extends AnyFlatSpec with Matchers with MockFactory {
val dependency = "com.test" %% "test_module" % bom
dependency.revision should be("1.0")
+
+ bom.bomDependencies shouldBe Seq("com.test" % "test_module_2.12" % "1.0")
}
- private def createMockPomFile(groupId: String, artifactId: String, version: String, addParent: Boolean): File = {
+ private def createMockPomFile(
+ groupId: String,
+ artifactId: String,
+ version: String,
+ addParent: Boolean
+ ): File = {
val tempFile = File.createTempFile("mock", ".xml")
val pomContent =
@@ -81,8 +92,7 @@ class BomReaderSpec extends AnyFlatSpec with Matchers with MockFactory {
| $groupId
| $artifactId
| $version
- | ${
- if (addParent)
+ | ${if (addParent)
s"""
|
| $groupId
@@ -101,8 +111,7 @@ class BomReaderSpec extends AnyFlatSpec with Matchers with MockFactory {
| |
| |
|
- |""".stripMargin
- }
+ |""".stripMargin}
|
| """.stripMargin