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