diff --git a/.github/workflows/docker-image.yaml b/.github/workflows/docker-image.yaml index 304fedf..e0445fb 100644 --- a/.github/workflows/docker-image.yaml +++ b/.github/workflows/docker-image.yaml @@ -27,4 +27,4 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} repository: rbaul/microservice-visualization - tags: latest,1.2.0 + tags: latest,1.3.0 diff --git a/demo/app-bom/build.gradle b/demo/app-bom/build.gradle new file mode 100644 index 0000000..8a854e3 --- /dev/null +++ b/demo/app-bom/build.gradle @@ -0,0 +1,66 @@ +plugins { + id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'java' +} + +group = 'com.demo' +version = '0.0.1-SNAPSHOT' +java { + sourceCompatibility = JavaVersion.VERSION_17 +} +description = 'Application BOM' + +apply from: '../../plugins/gradle/dependencies-util.gradle' + +ext { + name = 'Application BOM' + ownerName = 'Team 1' + type = 'bom' +} + +project.ext.dependencyVersions = [ + "commons-collections4.version": "4.4", + "commons-io.version" : "2.11.0", + "jgrapht-core.version" : "1.5.1", + "guava.version" : "31.1-jre", +] + + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencyManagement { + dependencies { + /** + * The Apache Commons Collections package contains types that extend and augment the Java Collections Framework. + * https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 + */ + dependency 'org.apache.commons:commons-collections4:${commons-collections4.version}' + /** + * The Apache Commons IO library contains utility classes, stream implementations, file filters, file comparators, endian transformation classes, and much more. + * https://mvnrepository.com/artifact/commons-io/commons-io + */ + dependency 'commons-io:commons-io:${commons-io.version}' + /* + * JGraphT Core + * https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core + */ + dependency 'org.jgrapht:jgrapht-core:${jgrapht-core.version}' + /** + * Guava is a suite of core and expanded libraries that include utility classes, Google's collections, I/O classes, and much more. + * https://mvnrepository.com/artifact/com.google.guava/guava + */ + dependency 'com.google.guava:guava:${guava.version}' + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/demo/basket-api/build.gradle b/demo/basket-api/build.gradle index 8a130fd..dfefaaf 100644 --- a/demo/basket-api/build.gradle +++ b/demo/basket-api/build.gradle @@ -6,7 +6,17 @@ plugins { group = 'com.demo' version = '0.0.1-SNAPSHOT' -sourceCompatibility = JavaVersion.VERSION_17 +java { + sourceCompatibility = JavaVersion.VERSION_17 +} + +ext { + name = 'Basket API' + ownerName = 'Team 1' + type = 'library' +} + +apply from: '../../plugins/gradle/dependencies-util.gradle' configurations { compileOnly { diff --git a/demo/basket/build.gradle b/demo/basket/build.gradle index ed4babd..4f48071 100644 --- a/demo/basket/build.gradle +++ b/demo/basket/build.gradle @@ -6,7 +6,9 @@ plugins { group = 'com.demo' version = '0.0.1-SNAPSHOT' -sourceCompatibility = JavaVersion.VERSION_17 +java { + sourceCompatibility = JavaVersion.VERSION_17 +} description = 'Basket application' apply from: '../../plugins/gradle/dependencies-util.gradle' @@ -15,6 +17,7 @@ ext { springCloudVersion = '2022.0.2' name = 'Basket' ownerName = 'Team 1' + type = 'microservice' } diff --git a/demo/customer/build.gradle b/demo/customer/build.gradle index 3f76e21..4fe9c26 100644 --- a/demo/customer/build.gradle +++ b/demo/customer/build.gradle @@ -6,7 +6,9 @@ plugins { group = 'com.demo' version = '0.0.1-SNAPSHOT' -sourceCompatibility = JavaVersion.VERSION_17 +java { + sourceCompatibility = JavaVersion.VERSION_17 +} description = 'Customer application' apply from: '../../plugins/gradle/dependencies-util.gradle' @@ -15,6 +17,7 @@ ext { springCloudVersion = '2021.0.5' name = 'Customer' ownerName = 'Team 1' + type = 'microservice' } configurations { diff --git a/demo/ordering/build.gradle b/demo/ordering/build.gradle index 4427d7e..34cf275 100644 --- a/demo/ordering/build.gradle +++ b/demo/ordering/build.gradle @@ -6,11 +6,14 @@ plugins { group = 'com.demo' version = '0.0.1-SNAPSHOT' -sourceCompatibility = JavaVersion.VERSION_17 +java { + sourceCompatibility = JavaVersion.VERSION_17 +} description = 'Ordering application' ext { ownerName = 'Team 2' + type = 'microservice' } apply from: '../../plugins/gradle/dependencies-util.gradle' diff --git a/demo/product/build.gradle b/demo/product/build.gradle index 690b84e..36aa348 100644 --- a/demo/product/build.gradle +++ b/demo/product/build.gradle @@ -6,12 +6,15 @@ plugins { group = 'com.demo' version = '0.0.1-SNAPSHOT' -sourceCompatibility = JavaVersion.VERSION_17 +java { + sourceCompatibility = JavaVersion.VERSION_17 +} description = 'Product application' ext { name = 'Product' ownerName = 'Team 3' + type = 'microservice' } apply from: '../../plugins/gradle/dependencies-util.gradle' diff --git a/docker/demo-project/2.0.0/applications/basket.json b/docker/demo-project/2.0.0/applications/basket.json index f54eec6..2a16ad1 100644 --- a/docker/demo-project/2.0.0/applications/basket.json +++ b/docker/demo-project/2.0.0/applications/basket.json @@ -1,11 +1,15 @@ { "name": "basket", "label": "Basket", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Basket application", + "type": "microservice", "owner": "Team 1", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:2.7.10", @@ -15,11 +19,178 @@ "org.springframework.boot:spring-boot-starter-actuator:2.7.10", "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "com.demo:basket-api:0.0.1-SNAPSHOT" + ], + "fullDependencies": [ "com.demo:basket-api:0.0.1-SNAPSHOT", - "com.h2database:h2:2.1.214" + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-starter-json:2.7.10", + "org.springframework.boot:spring-boot-starter-aop:2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.10", + "org.springframework.boot:spring-boot-starter:2.7.10", + "org.springframework.amqp:spring-rabbit:2.4.11", + "org.springframework:spring-messaging:5.3.26", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.10", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.73", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.26", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.26", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.hibernate:hibernate-core:5.6.15.Final", + "org.springframework.data:spring-data-jpa:2.7.10", + "org.springframework:spring-aspects:5.3.26", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.10", + "io.micrometer:micrometer-core:1.9.9", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:2.7.10", + "org.springframework.boot:spring-boot-actuator:2.7.10", + "org.springframework.boot:spring-boot:2.7.10", + "org.springframework.boot:spring-boot-starter-logging:2.7.10", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework:spring-context:5.3.26", + "org.springframework:spring-orm:5.3.26", + "org.springframework:spring-jdbc:5.3.26", + "org.springframework:spring-tx:5.3.26", + "org.springframework:spring-aop:5.3.26", + "org.springframework.data:spring-data-commons:2.7.10", + "org.springframework:spring-beans:5.3.26", + "org.springframework.amqp:spring-amqp:2.4.11", + "org.springframework:spring-expression:5.3.26", + "org.springframework:spring-core:5.3.26", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5", + "com.fasterxml.jackson.core:jackson-databind:2.13.5", + "com.fasterxml.jackson.core:jackson-core:2.13.5", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.73", + "org.aspectj:aspectjweaver:1.9.7", + "com.zaxxer:HikariCP:4.0.3", + "net.bytebuddy:byte-buddy:1.12.23", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.8", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "org.slf4j:slf4j-api:1.7.36", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "org.springframework:spring-jcl:5.3.26", + "org.springframework.retry:spring-retry:1.3.1", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.glassfish.jaxb:txw2:2.3.8", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8" ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:2.7.10", "org.springframework.cloud:spring-cloud-dependencies:2022.0.2" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.10": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.23", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.8", + "org.glassfish.jaxb:txw2": "2.3.8", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.15.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.10", + "org.springframework.boot:spring-boot-actuator": "2.7.10", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-starter": "2.7.10", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.10", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.10", + "org.springframework.boot:spring-boot-starter-aop": "2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.10", + "org.springframework.boot:spring-boot-starter-json": "2.7.10", + "org.springframework.boot:spring-boot-starter-logging": "2.7.10", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.10", + "org.springframework.boot:spring-boot-starter-validation": "2.7.10", + "org.springframework.boot:spring-boot-starter-web": "2.7.10", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.11", + "org.springframework.amqp:spring-rabbit": "2.4.11", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.73", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.5", + "com.fasterxml.jackson.core:jackson-core": "2.13.5", + "com.fasterxml.jackson.core:jackson-databind": "2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.5", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.9", + "org.springframework.data:spring-data-commons": "2.7.10", + "org.springframework.data:spring-data-jpa": "2.7.10", + "org.springframework:spring-aop": "5.3.26", + "org.springframework:spring-aspects": "5.3.26", + "org.springframework:spring-beans": "5.3.26", + "org.springframework:spring-context": "5.3.26", + "org.springframework:spring-core": "5.3.26", + "org.springframework:spring-expression": "5.3.26", + "org.springframework:spring-jcl": "5.3.26", + "org.springframework:spring-jdbc": "5.3.26", + "org.springframework:spring-messaging": "5.3.26", + "org.springframework:spring-orm": "5.3.26", + "org.springframework:spring-tx": "5.3.26", + "org.springframework:spring-web": "5.3.26", + "org.springframework:spring-webmvc": "5.3.26" + }, + "org.springframework.cloud:spring-cloud-dependencies:2022.0.2": { + "org.springframework.retry:spring-retry": "1.3.1" + } + } } \ No newline at end of file diff --git a/docker/demo-project/2.0.0/applications/customer.json b/docker/demo-project/2.0.0/applications/customer.json index 5ff80fc..9f3aad4 100644 --- a/docker/demo-project/2.0.0/applications/customer.json +++ b/docker/demo-project/2.0.0/applications/customer.json @@ -1,11 +1,15 @@ { "name": "customer", "label": "Customer", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Customer application", + "type": "microservice", "owner": "Team 1", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:2.7.5", @@ -14,10 +18,193 @@ "org.springframework.boot:spring-boot-starter-web:2.7.5", "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-actuator:2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.5", + "com.h2database:h2:2.1.214", "com.demo:basket-api:0.0.1-SNAPSHOT" ], + "fullDependencies": [ + "com.demo:basket-api:0.0.1-SNAPSHOT", + "org.springframework.boot:spring-boot-starter-amqp:2.7.5", + "org.springframework.boot:spring-boot-starter-data-mongodb:2.7.5", + "org.springframework.boot:spring-boot-starter-validation:2.7.5", + "org.springframework.boot:spring-boot-starter-web:2.7.5", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-json:2.7.5", + "org.springframework.boot:spring-boot-starter-actuator:2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.5", + "org.springframework.boot:spring-boot-starter-aop:2.7.5", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.5", + "org.springframework.boot:spring-boot-starter:2.7.5", + "org.springframework.amqp:spring-rabbit:2.4.7", + "org.springframework:spring-messaging:5.3.23", + "org.mongodb:mongodb-driver-sync:4.6.1", + "org.springframework.data:spring-data-mongodb:3.4.5", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.5", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.68", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.23", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.23", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.5", + "org.springframework.boot:spring-boot-autoconfigure:2.7.5", + "org.springframework.boot:spring-boot-actuator:2.7.5", + "org.springframework.boot:spring-boot:2.7.5", + "org.springframework.boot:spring-boot-starter-logging:2.7.5", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework.data:spring-data-jpa:2.7.5", + "org.springframework:spring-context:5.3.23", + "org.springframework:spring-orm:5.3.23", + "org.springframework:spring-jdbc:5.3.23", + "org.springframework:spring-tx:5.3.23", + "org.springframework.data:spring-data-commons:2.7.5", + "org.springframework:spring-aop:5.3.23", + "org.springframework:spring-beans:5.3.23", + "org.springframework.amqp:spring-amqp:2.4.7", + "org.springframework:spring-expression:5.3.23", + "org.springframework:spring-core:5.3.23", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.4", + "com.fasterxml.jackson.core:jackson-databind:2.13.4.2", + "com.fasterxml.jackson.core:jackson-core:2.13.4", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.4", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.4", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "org.mongodb:mongodb-driver-core:4.6.1", + "org.mongodb:bson-record-codec:4.6.1", + "org.mongodb:bson:4.6.1", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "com.zaxxer:HikariCP:4.0.3", + "org.slf4j:slf4j-api:1.7.36", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate:hibernate-core:5.6.12.Final", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.68", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.68", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.springframework:spring-aspects:5.3.23", + "io.micrometer:micrometer-core:1.9.5", + "org.springframework:spring-jcl:5.3.23", + "org.springframework.retry:spring-retry:1.3.1", + "org.aspectj:aspectjweaver:1.9.7", + "net.bytebuddy:byte-buddy:1.12.18", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.7", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8", + "org.glassfish.jaxb:txw2:2.3.7", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "jakarta.activation:jakarta.activation-api:1.2.2" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:2.7.5", "org.springframework.cloud:spring-cloud-dependencies:2021.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.5": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.18", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.7", + "org.glassfish.jaxb:txw2": "2.3.7", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.12.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.activation:jakarta.activation-api": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "org.mongodb:bson": "4.6.1", + "org.mongodb:mongodb-driver-core": "4.6.1", + "org.mongodb:mongodb-driver-sync": "4.6.1", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.5", + "org.springframework.boot:spring-boot-actuator": "2.7.5", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.5", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.5", + "org.springframework.boot:spring-boot-starter": "2.7.5", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.5", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.5", + "org.springframework.boot:spring-boot-starter-aop": "2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.5", + "org.springframework.boot:spring-boot-starter-data-mongodb": "2.7.5", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.5", + "org.springframework.boot:spring-boot-starter-json": "2.7.5", + "org.springframework.boot:spring-boot-starter-logging": "2.7.5", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.5", + "org.springframework.boot:spring-boot-starter-validation": "2.7.5", + "org.springframework.boot:spring-boot-starter-web": "2.7.5", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.7", + "org.springframework.amqp:spring-rabbit": "2.4.7", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.68", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.68", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.68", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.4", + "com.fasterxml.jackson.core:jackson-core": "2.13.4", + "com.fasterxml.jackson.core:jackson-databind": "2.13.4.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.4", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.4", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.5", + "org.springframework.data:spring-data-commons": "2.7.5", + "org.springframework.data:spring-data-jpa": "2.7.5", + "org.springframework.data:spring-data-mongodb": "3.4.5", + "org.springframework:spring-aop": "5.3.23", + "org.springframework:spring-aspects": "5.3.23", + "org.springframework:spring-beans": "5.3.23", + "org.springframework:spring-context": "5.3.23", + "org.springframework:spring-core": "5.3.23", + "org.springframework:spring-expression": "5.3.23", + "org.springframework:spring-jcl": "5.3.23", + "org.springframework:spring-jdbc": "5.3.23", + "org.springframework:spring-messaging": "5.3.23", + "org.springframework:spring-orm": "5.3.23", + "org.springframework:spring-tx": "5.3.23", + "org.springframework:spring-web": "5.3.23", + "org.springframework:spring-webmvc": "5.3.23" + }, + "org.springframework.cloud:spring-cloud-dependencies:2021.0.5": { + "org.springframework.retry:spring-retry": "1.3.1" + } + } } \ No newline at end of file diff --git a/docker/demo-project/2.0.0/applications/ordering.json b/docker/demo-project/2.0.0/applications/ordering.json index c0e3f53..642cc10 100644 --- a/docker/demo-project/2.0.0/applications/ordering.json +++ b/docker/demo-project/2.0.0/applications/ordering.json @@ -1,17 +1,105 @@ { "name": "ordering", "label": "Ordering", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Ordering application", + "type": "microservice", "owner": "Team 2", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-web:3.0.5", "org.springframework.boot:spring-boot-starter-validation:3.0.5" ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-web:3.0.5", + "org.springframework.boot:spring-boot-starter-validation:3.0.5", + "org.springframework.boot:spring-boot-starter-json:3.0.5", + "org.springframework.boot:spring-boot-starter:3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat:3.0.5", + "org.springframework:spring-webmvc:6.0.7", + "org.springframework:spring-web:6.0.7", + "org.apache.tomcat.embed:tomcat-embed-el:10.1.7", + "org.hibernate.validator:hibernate-validator:8.0.0.Final", + "org.springframework.boot:spring-boot-autoconfigure:3.0.5", + "org.springframework.boot:spring-boot:3.0.5", + "org.springframework.boot:spring-boot-starter-logging:3.0.5", + "jakarta.annotation:jakarta.annotation-api:2.1.1", + "org.springframework:spring-context:6.0.7", + "org.springframework:spring-aop:6.0.7", + "org.springframework:spring-beans:6.0.7", + "org.springframework:spring-expression:6.0.7", + "org.springframework:spring-core:6.0.7", + "org.yaml:snakeyaml:1.33", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.14.2", + "com.fasterxml.jackson.core:jackson-annotations:2.14.2", + "com.fasterxml.jackson.core:jackson-core:2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.14.2", + "com.fasterxml.jackson.core:jackson-databind:2.14.2", + "org.apache.tomcat.embed:tomcat-embed-websocket:10.1.7", + "org.apache.tomcat.embed:tomcat-embed-core:10.1.7", + "io.micrometer:micrometer-observation:1.10.5", + "jakarta.validation:jakarta.validation-api:3.0.2", + "org.jboss.logging:jboss-logging:3.5.0.Final", + "com.fasterxml:classmate:1.5.1", + "ch.qos.logback:logback-classic:1.4.6", + "org.apache.logging.log4j:log4j-to-slf4j:2.19.0", + "org.slf4j:jul-to-slf4j:2.0.7", + "org.springframework:spring-jcl:6.0.7", + "io.micrometer:micrometer-commons:1.10.5", + "ch.qos.logback:logback-core:1.4.6", + "org.slf4j:slf4j-api:2.0.7", + "org.apache.logging.log4j:log4j-api:2.19.0" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:3.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:3.0.5": { + "com.fasterxml:classmate": "1.5.1", + "org.hibernate.validator:hibernate-validator": "8.0.0.Final", + "jakarta.annotation:jakarta.annotation-api": "2.1.1", + "jakarta.validation:jakarta.validation-api": "3.0.2", + "org.jboss.logging:jboss-logging": "3.5.0.Final", + "ch.qos.logback:logback-classic": "1.4.6", + "ch.qos.logback:logback-core": "1.4.6", + "org.springframework.boot:spring-boot": "3.0.5", + "org.springframework.boot:spring-boot-autoconfigure": "3.0.5", + "org.springframework.boot:spring-boot-starter": "3.0.5", + "org.springframework.boot:spring-boot-starter-json": "3.0.5", + "org.springframework.boot:spring-boot-starter-logging": "3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat": "3.0.5", + "org.springframework.boot:spring-boot-starter-validation": "3.0.5", + "org.springframework.boot:spring-boot-starter-web": "3.0.5", + "org.slf4j:jul-to-slf4j": "2.0.7", + "org.slf4j:slf4j-api": "2.0.7", + "org.yaml:snakeyaml": "1.33", + "org.apache.tomcat.embed:tomcat-embed-core": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-el": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-websocket": "10.1.7", + "com.fasterxml.jackson.core:jackson-annotations": "2.14.2", + "com.fasterxml.jackson.core:jackson-core": "2.14.2", + "com.fasterxml.jackson.core:jackson-databind": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.14.2", + "org.apache.logging.log4j:log4j-api": "2.19.0", + "org.apache.logging.log4j:log4j-to-slf4j": "2.19.0", + "io.micrometer:micrometer-commons": "1.10.5", + "io.micrometer:micrometer-observation": "1.10.5", + "org.springframework:spring-aop": "6.0.7", + "org.springframework:spring-beans": "6.0.7", + "org.springframework:spring-context": "6.0.7", + "org.springframework:spring-core": "6.0.7", + "org.springframework:spring-expression": "6.0.7", + "org.springframework:spring-jcl": "6.0.7", + "org.springframework:spring-web": "6.0.7", + "org.springframework:spring-webmvc": "6.0.7" + } + } } \ No newline at end of file diff --git a/docker/demo-project/2.0.0/applications/product.json b/docker/demo-project/2.0.0/applications/product.json index cd0e04c..280bb3f 100644 --- a/docker/demo-project/2.0.0/applications/product.json +++ b/docker/demo-project/2.0.0/applications/product.json @@ -1,11 +1,15 @@ { "name": "product", "label": "Product", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Product application", + "type": "microservice", "owner": "Team 3", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:3.0.5", @@ -15,7 +19,139 @@ "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1" ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:3.0.5", + "org.springframework.boot:spring-boot-starter-data-mongodb:3.0.5", + "org.springframework.boot:spring-boot-starter-validation:3.0.5", + "org.springframework.boot:spring-boot-starter-web:3.0.5", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-json:3.0.5", + "org.springframework.boot:spring-boot-starter:3.0.5", + "org.springframework.amqp:spring-rabbit:3.0.3", + "org.springframework:spring-messaging:6.0.7", + "org.mongodb:mongodb-driver-sync:4.8.2", + "org.springframework.data:spring-data-mongodb:4.0.4", + "org.springframework.boot:spring-boot-starter-tomcat:3.0.5", + "org.apache.tomcat.embed:tomcat-embed-el:10.1.7", + "org.hibernate.validator:hibernate-validator:8.0.0.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:6.0.7", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:6.0.7", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.52", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:3.0.5", + "org.springframework.boot:spring-boot:3.0.5", + "org.springframework.boot:spring-boot-starter-logging:3.0.5", + "jakarta.annotation:jakarta.annotation-api:2.1.1", + "org.springframework:spring-context:6.0.7", + "org.springframework:spring-tx:6.0.7", + "org.springframework.data:spring-data-commons:3.0.4", + "org.springframework:spring-aop:6.0.7", + "org.springframework:spring-beans:6.0.7", + "org.springframework.amqp:spring-amqp:3.0.3", + "org.springframework:spring-expression:6.0.7", + "org.springframework:spring-core:6.0.7", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.14.2", + "com.fasterxml.jackson.core:jackson-databind:2.14.2", + "com.fasterxml.jackson.core:jackson-core:2.14.2", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.14.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.2", + "org.yaml:snakeyaml:1.33", + "com.rabbitmq:amqp-client:5.16.0", + "io.micrometer:micrometer-observation:1.10.5", + "org.mongodb:mongodb-driver-core:4.8.2", + "org.mongodb:bson-record-codec:4.8.2", + "org.mongodb:bson:4.8.2", + "ch.qos.logback:logback-classic:1.4.6", + "org.apache.logging.log4j:log4j-to-slf4j:2.19.0", + "org.slf4j:jul-to-slf4j:2.0.7", + "org.slf4j:slf4j-api:2.0.7", + "jakarta.validation:jakarta.validation-api:3.0.2", + "org.jboss.logging:jboss-logging:3.5.0.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:10.1.7", + "org.apache.tomcat.embed:tomcat-embed-core:10.1.7", + "org.springframework:spring-jcl:6.0.7", + "org.springframework.retry:spring-retry:2.0.1", + "io.micrometer:micrometer-commons:1.10.5", + "ch.qos.logback:logback-core:1.4.6", + "org.apache.logging.log4j:log4j-api:2.19.0", + "jakarta.xml.bind:jakarta.xml.bind-api:4.0.0", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8", + "jakarta.activation:jakarta.activation-api:2.1.1" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:3.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:3.0.5": { + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.hibernate.validator:hibernate-validator": "8.0.0.Final", + "jakarta.activation:jakarta.activation-api": "2.1.1", + "jakarta.annotation:jakarta.annotation-api": "2.1.1", + "jakarta.validation:jakarta.validation-api": "3.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "4.0.0", + "org.jboss.logging:jboss-logging": "3.5.0.Final", + "ch.qos.logback:logback-classic": "1.4.6", + "ch.qos.logback:logback-core": "1.4.6", + "org.mongodb:bson": "4.8.2", + "org.mongodb:bson-record-codec": "4.8.2", + "org.mongodb:mongodb-driver-core": "4.8.2", + "org.mongodb:mongodb-driver-sync": "4.8.2", + "com.rabbitmq:amqp-client": "5.16.0", + "org.springframework.boot:spring-boot": "3.0.5", + "org.springframework.boot:spring-boot-autoconfigure": "3.0.5", + "org.springframework.boot:spring-boot-starter": "3.0.5", + "org.springframework.boot:spring-boot-starter-amqp": "3.0.5", + "org.springframework.boot:spring-boot-starter-data-mongodb": "3.0.5", + "org.springframework.boot:spring-boot-starter-json": "3.0.5", + "org.springframework.boot:spring-boot-starter-logging": "3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat": "3.0.5", + "org.springframework.boot:spring-boot-starter-validation": "3.0.5", + "org.springframework.boot:spring-boot-starter-web": "3.0.5", + "org.slf4j:jul-to-slf4j": "2.0.7", + "org.slf4j:slf4j-api": "2.0.7", + "org.yaml:snakeyaml": "1.33", + "org.springframework.amqp:spring-amqp": "3.0.3", + "org.springframework.amqp:spring-rabbit": "3.0.3", + "org.springframework.retry:spring-retry": "2.0.1", + "org.apache.tomcat.embed:tomcat-embed-core": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-el": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-websocket": "10.1.7", + "org.webjars:webjars-locator-core": "0.52", + "com.fasterxml.jackson.core:jackson-annotations": "2.14.2", + "com.fasterxml.jackson.core:jackson-core": "2.14.2", + "com.fasterxml.jackson.core:jackson-databind": "2.14.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.14.2", + "org.apache.logging.log4j:log4j-api": "2.19.0", + "org.apache.logging.log4j:log4j-to-slf4j": "2.19.0", + "io.micrometer:micrometer-commons": "1.10.5", + "io.micrometer:micrometer-observation": "1.10.5", + "org.springframework.data:spring-data-commons": "3.0.4", + "org.springframework.data:spring-data-mongodb": "4.0.4", + "org.springframework:spring-aop": "6.0.7", + "org.springframework:spring-beans": "6.0.7", + "org.springframework:spring-context": "6.0.7", + "org.springframework:spring-core": "6.0.7", + "org.springframework:spring-expression": "6.0.7", + "org.springframework:spring-jcl": "6.0.7", + "org.springframework:spring-messaging": "6.0.7", + "org.springframework:spring-tx": "6.0.7", + "org.springframework:spring-web": "6.0.7", + "org.springframework:spring-webmvc": "6.0.7" + } + } } \ No newline at end of file diff --git a/docker/demo-project/2.0.0/boms/app-bom.json b/docker/demo-project/2.0.0/boms/app-bom.json new file mode 100644 index 0000000..d91bd6a --- /dev/null +++ b/docker/demo-project/2.0.0/boms/app-bom.json @@ -0,0 +1,20 @@ +{ + "name": "app-bom", + "label": "Application BOM", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", + "description": "Application BOM", + "type": "bom", + "owner": "Team 1", + "tags": { + "java": "17", + "gradle": "8.5", + "Overridden by dependencies": true + }, + "dependencies": [ + "commons-io:commons-io:2.11.0", + "org.apache.commons:commons-collections4:4.4", + "com.google.guava:guava:31.1-jre", + "org.jgrapht:jgrapht-core:1.5.1" + ] +} \ No newline at end of file diff --git a/docker/demo-project/2.0.0/libraries/basket-api.json b/docker/demo-project/2.0.0/libraries/basket-api.json index df79864..0b5a8c7 100644 --- a/docker/demo-project/2.0.0/libraries/basket-api.json +++ b/docker/demo-project/2.0.0/libraries/basket-api.json @@ -1,18 +1,189 @@ { "name": "basket-api", "label": "Basket API", - "description": "Basket application", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", + "type": "library", "owner": "Team 1", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:2.7.10", - "org.springframework.boot:spring-boot-starter-validation:2.7.10" + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214" + ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-starter-json:2.7.10", + "org.springframework.boot:spring-boot-starter-aop:2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.10", + "org.springframework.boot:spring-boot-starter:2.7.10", + "org.springframework.amqp:spring-rabbit:2.4.11", + "org.springframework:spring-messaging:5.3.26", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.10", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.73", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.26", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.26", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.hibernate:hibernate-core:5.6.15.Final", + "org.springframework.data:spring-data-jpa:2.7.10", + "org.springframework:spring-aspects:5.3.26", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.10", + "io.micrometer:micrometer-core:1.9.9", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:2.7.10", + "org.springframework.boot:spring-boot-actuator:2.7.10", + "org.springframework.boot:spring-boot:2.7.10", + "org.springframework.boot:spring-boot-starter-logging:2.7.10", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework:spring-context:5.3.26", + "org.springframework:spring-orm:5.3.26", + "org.springframework:spring-jdbc:5.3.26", + "org.springframework:spring-tx:5.3.26", + "org.springframework:spring-aop:5.3.26", + "org.springframework.data:spring-data-commons:2.7.10", + "org.springframework:spring-beans:5.3.26", + "org.springframework.amqp:spring-amqp:2.4.11", + "org.springframework:spring-expression:5.3.26", + "org.springframework:spring-core:5.3.26", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5", + "com.fasterxml.jackson.core:jackson-databind:2.13.5", + "com.fasterxml.jackson.core:jackson-core:2.13.5", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.73", + "org.aspectj:aspectjweaver:1.9.7", + "com.zaxxer:HikariCP:4.0.3", + "net.bytebuddy:byte-buddy:1.12.23", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.8", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "org.slf4j:slf4j-api:1.7.36", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "org.springframework:spring-jcl:5.3.26", + "org.springframework.retry:spring-retry:1.3.4", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.glassfish.jaxb:txw2:2.3.8", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8" ], "managementDependencies": [ - "org.springframework.boot:spring-boot-dependencies:2.7.10", - "org.springframework.cloud:spring-cloud-dependencies:2022.0.2" - ] + "org.springframework.boot:spring-boot-dependencies:2.7.10" + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.10": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.23", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.8", + "org.glassfish.jaxb:txw2": "2.3.8", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.15.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.10", + "org.springframework.boot:spring-boot-actuator": "2.7.10", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-starter": "2.7.10", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.10", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.10", + "org.springframework.boot:spring-boot-starter-aop": "2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.10", + "org.springframework.boot:spring-boot-starter-json": "2.7.10", + "org.springframework.boot:spring-boot-starter-logging": "2.7.10", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.10", + "org.springframework.boot:spring-boot-starter-validation": "2.7.10", + "org.springframework.boot:spring-boot-starter-web": "2.7.10", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.11", + "org.springframework.amqp:spring-rabbit": "2.4.11", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.73", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.5", + "com.fasterxml.jackson.core:jackson-core": "2.13.5", + "com.fasterxml.jackson.core:jackson-databind": "2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.5", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.9", + "org.springframework.data:spring-data-commons": "2.7.10", + "org.springframework.data:spring-data-jpa": "2.7.10", + "org.springframework:spring-aop": "5.3.26", + "org.springframework:spring-aspects": "5.3.26", + "org.springframework:spring-beans": "5.3.26", + "org.springframework:spring-context": "5.3.26", + "org.springframework:spring-core": "5.3.26", + "org.springframework:spring-expression": "5.3.26", + "org.springframework:spring-jcl": "5.3.26", + "org.springframework:spring-jdbc": "5.3.26", + "org.springframework:spring-messaging": "5.3.26", + "org.springframework:spring-orm": "5.3.26", + "org.springframework:spring-tx": "5.3.26", + "org.springframework:spring-web": "5.3.26", + "org.springframework:spring-webmvc": "5.3.26" + } + } } \ No newline at end of file diff --git a/microservice-visualization-webapp/angular.json b/microservice-visualization-webapp/angular.json index 10e6fb8..0a88cc4 100644 --- a/microservice-visualization-webapp/angular.json +++ b/microservice-visualization-webapp/angular.json @@ -42,8 +42,8 @@ "budgets": [ { "type": "initial", - "maximumWarning": "500kb", - "maximumError": "2mb" + "maximumWarning": "2500kb", + "maximumError": "4mb" }, { "type": "anyComponentStyle", @@ -107,4 +107,4 @@ "cli": { "analytics": false } -} \ No newline at end of file +} diff --git a/microservice-visualization-webapp/src/app/api/application-api.model.ts b/microservice-visualization-webapp/src/app/api/application-api.model.ts index 92af848..a81b936 100644 --- a/microservice-visualization-webapp/src/app/api/application-api.model.ts +++ b/microservice-visualization-webapp/src/app/api/application-api.model.ts @@ -23,5 +23,6 @@ export interface ApplicationLiteDto { export enum ApplicationType { MICROSERVICE = 'MICROSERVICE', - LIBRARY = 'LIBRARY' + LIBRARY = 'LIBRARY', + BOM = 'BOM' } diff --git a/microservice-visualization-webapp/src/app/api/project-api.service.ts b/microservice-visualization-webapp/src/app/api/project-api.service.ts index a53aaa2..a69b2a0 100644 --- a/microservice-visualization-webapp/src/app/api/project-api.service.ts +++ b/microservice-visualization-webapp/src/app/api/project-api.service.ts @@ -27,6 +27,14 @@ export class ProjectApiService { { params: new HttpParams().set('projectVersionId', projectVersionId) }); } + public getDirectDependencies(id: number): Observable { + return this.http.get(`${API_URL}/${id}/dependencies/direct`, httpJsonOptions); + } + + public getImplicitDependencies(id: number): Observable { + return this.http.get(`${API_URL}/${id}/dependencies/implicit`, httpJsonOptions); + } + public getDependencies(id: number): Observable { return this.http.get(`${API_URL}/${id}/dependencies`, httpJsonOptions); } diff --git a/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.html b/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.html index 1feb447..14062ef 100644 --- a/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.html +++ b/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.html @@ -1,18 +1,21 @@
Dependencies of {{data.projectVersion.name}} +
- + +
+ [rowsPerPageOptions]="[10, 25, 50]" [scrollable]="true" scrollHeight="calc(80vh - 200px)" + (sortFunction)="customSort($event)" [customSort]="true" [styleClass]="'p-datatable-sm'" [resizableColumns]="true" + [reorderableColumns]="true" [globalFilterFields]="globalFilterFields">
diff --git a/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.ts b/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.ts index 859ede4..a12203e 100644 --- a/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.ts +++ b/microservice-visualization-webapp/src/app/project-dependencies/project-dependencies.component.ts @@ -8,6 +8,9 @@ import { ToolbarModule } from 'primeng/toolbar'; import { ProjectApiService } from '../api/project-api.service'; import { TagModule } from 'primeng/tag'; import { ProjectDependenciesDto } from '../api/project-api.model'; +import { SelectButtonChangeEvent, SelectButtonModule } from 'primeng/selectbutton'; +import { ToggleView } from '../project-view/project-view.component'; +import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-project-dependencies', @@ -18,7 +21,9 @@ import { ProjectDependenciesDto } from '../api/project-api.model'; TableModule, InputTextModule, ButtonModule, - TagModule + TagModule, + SelectButtonModule, + FormsModule ], templateUrl: './project-dependencies.component.html', styleUrl: './project-dependencies.component.scss' @@ -28,17 +33,32 @@ export class ProjectDependenciesComponent { private router = inject(Router); private projectApiService = inject(ProjectApiService); - data!: ProjectDependenciesDto; + private projectId!: number; + + toggleOptions: ToggleView[] = [ + { name: 'Direct', value: 1 }, + { name: 'Full', value: 2 }, + { name: 'Implicit', value: 3 } + ]; + + toggleSelect: number = 1; + + data: ProjectDependenciesDto = { + id: 0, + version: '0', + dependencies: [], + projectVersion: { + name: '' + } + }; globalFilterFields: string[] = ['packageName', 'artifactName']; ngOnInit() { this.activatedRoute.params.subscribe(value => { - let projectId: number = value['id']; - if (projectId) { - this.projectApiService.getDependencies(projectId).subscribe(result => { - this.data = result; - }); + this.projectId = value['id']; + if (this.projectId) { + this.filterChange(1); } }); } @@ -51,6 +71,32 @@ export class ProjectDependenciesComponent { table.clear(); } + filterChange(value: number): void { + switch(value) { + case 1: { + this.projectApiService.getDirectDependencies(this.projectId).subscribe(result => { + this.data = result; + }); + break; + } + case 2: { + this.projectApiService.getDependencies(this.projectId).subscribe(result => { + this.data = result; + }); + break; + } + case 3: { + this.projectApiService.getImplicitDependencies(this.projectId).subscribe(result => { + this.data = result; + }); + break; + } + default: { + + } + } + } + customSort(event: any) { event.data.sort((data1: any, data2: any) => { let value1 = data1[event.field]; diff --git a/microservice-visualization-webapp/src/app/project-view/project-view.component.html b/microservice-visualization-webapp/src/app/project-view/project-view.component.html index 6f3b585..814b76a 100644 --- a/microservice-visualization-webapp/src/app/project-view/project-view.component.html +++ b/microservice-visualization-webapp/src/app/project-view/project-view.component.html @@ -50,10 +50,16 @@ - @if (isLibrary(option.value)) { - - } @else { - + @switch (option.value) { + @case ('LIBRARY') { + + } + @case ('MICROSERVICE') { + + } + @case ('BOM') { + + } } @@ -78,10 +84,16 @@ {{ app.name }} - @if (isLibrary(app.type)) { - - } @else { - + @switch (app.type) { + @case ('LIBRARY') { + + } + @case ('MICROSERVICE') { + + } + @case ('BOM') { + + } } @for (column of selectedColumns; track $index) { diff --git a/microservice-visualization-webapp/src/app/project-view/project-view.component.ts b/microservice-visualization-webapp/src/app/project-view/project-view.component.ts index 9f7cf9b..dc80aea 100644 --- a/microservice-visualization-webapp/src/app/project-view/project-view.component.ts +++ b/microservice-visualization-webapp/src/app/project-view/project-view.component.ts @@ -20,7 +20,6 @@ import { ProjectTopologyComponent, TopologyType } from '../project-topology/proj import { get } from 'lodash'; import { DropdownModule } from 'primeng/dropdown'; import { MultiSelectModule } from 'primeng/multiselect'; -import { ProjectDependenciesComponent } from '../project-dependencies/project-dependencies.component'; @Component({ selector: 'app-project-view', @@ -61,7 +60,8 @@ export class ProjectViewComponent implements OnInit, OnDestroy { types: AppType[] = [ { label: 'Library', value: ApplicationType.LIBRARY }, - { label: 'Microservice', value: ApplicationType.MICROSERVICE } + { label: 'Microservice', value: ApplicationType.MICROSERVICE }, + { label: 'BOM', value: ApplicationType.BOM } ]; selectedColumns: ColumnData[] = [ @@ -149,10 +149,6 @@ export class ProjectViewComponent implements OnInit, OnDestroy { console.log(`Row unselected ${JSON.stringify($event)}`) } - isLibrary(appType: ApplicationType): boolean { - return appType === ApplicationType.LIBRARY; - } - clear(table: Table) { table.clear(); } @@ -177,7 +173,7 @@ export class ProjectViewComponent implements OnInit, OnDestroy { } -interface ToggleView { +export interface ToggleView { value: number, name: string } diff --git a/microservice-visualization/build.gradle b/microservice-visualization/build.gradle index a001434..0f93a26 100644 --- a/microservice-visualization/build.gradle +++ b/microservice-visualization/build.gradle @@ -1,6 +1,6 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2' + id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' id 'maven-publish' } @@ -9,7 +9,7 @@ group = 'com.github.rbaul' version = '0.0.1-SNAPSHOT' java { - sourceCompatibility = '21' + sourceCompatibility = JavaVersion.VERSION_21 } configurations { @@ -36,13 +36,13 @@ dependencies { implementation 'org.modelmapper.extensions:modelmapper-spring:3.2.+' // GitHub - implementation 'org.kohsuke:github-api:1.318' + implementation 'org.kohsuke:github-api:1.319' // JGraphT implementation 'org.jgrapht:jgrapht-core:1.5.2' // Hibernate types - implementation 'io.hypersistence:hypersistence-utils-hibernate-63:3.7.1' + implementation 'io.hypersistence:hypersistence-utils-hibernate-63:3.7.+' // WebApp diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/Application.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/Application.java index b6d891e..026c17a 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/Application.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/Application.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -40,7 +41,7 @@ public class Application { private String location; @ElementCollection - private Set owners; + private Set<@NotEmpty String> owners; @Enumerated(EnumType.STRING) private ApplicationType type; @@ -49,10 +50,17 @@ public class Application { private Map tags; @ElementCollection - private List dependencies; + private List<@NotEmpty String> dependencies; + + @ElementCollection + private List<@NotNull DependencyEntity> fullDependencies; @ElementCollection - private List managementDependencies; + private List<@NotEmpty String> managementDependencies; + + @ToString.Exclude + @ElementCollection + private List<@NotNull DependencyManagement> dependencyManagements; @ToString.Exclude @ManyToOne(fetch = FetchType.LAZY) diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/ApplicationType.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/ApplicationType.java index 2dc6051..49ba62a 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/ApplicationType.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/ApplicationType.java @@ -1,6 +1,22 @@ package com.github.rbaul.microservice_visualization.domain.model; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.Optional; + +@Getter +@RequiredArgsConstructor public enum ApplicationType { - MICROSERVICE, - LIBRARY + MICROSERVICE("microservice"), + LIBRARY("library"), + BOM("bom"); + + private final String value; + + public static Optional getType(String type) { + return Arrays.stream(ApplicationType.values()) + .filter(applicationType -> applicationType.getValue().equals(type)).findFirst(); + } } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyEntity.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyEntity.java new file mode 100644 index 0000000..6ac55db --- /dev/null +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyEntity.java @@ -0,0 +1,23 @@ +package com.github.rbaul.microservice_visualization.domain.model; + +import jakarta.persistence.Embeddable; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Embeddable +public class DependencyEntity { + @NotEmpty + private String groupId; + @NotEmpty + private String artifactId; + @NotEmpty + private String version; + @NotNull + private Boolean implicit; +} diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyManagement.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyManagement.java new file mode 100644 index 0000000..3889c76 --- /dev/null +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/domain/model/DependencyManagement.java @@ -0,0 +1,23 @@ +package com.github.rbaul.microservice_visualization.domain.model; + +import jakarta.persistence.Embeddable; +import jakarta.validation.constraints.NotEmpty; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Embeddable +public class DependencyManagement { + @NotEmpty + private String groupId; + @NotEmpty + private String artifactId; + @NotEmpty + private String version; + private List<@NotEmpty String> dependencies; +} diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/ProjectService.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/ProjectService.java index c3176e3..0b1db81 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/ProjectService.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/ProjectService.java @@ -1,9 +1,6 @@ package com.github.rbaul.microservice_visualization.service; -import com.github.rbaul.microservice_visualization.domain.model.Application; -import com.github.rbaul.microservice_visualization.domain.model.LoaderDetails; -import com.github.rbaul.microservice_visualization.domain.model.Project; -import com.github.rbaul.microservice_visualization.domain.model.ProjectVersion; +import com.github.rbaul.microservice_visualization.domain.model.*; import com.github.rbaul.microservice_visualization.domain.repository.ProjectRepository; import com.github.rbaul.microservice_visualization.domain.repository.ProjectVersionRepository; import com.github.rbaul.microservice_visualization.exception.MicroserviceVisualizationException; @@ -22,6 +19,7 @@ import java.text.MessageFormat; import java.util.*; +import java.util.stream.Collectors; @Slf4j @RequiredArgsConstructor @@ -113,16 +111,87 @@ public ProjectDependenciesDto getDependencies(int id) { Map dependencies = new HashMap<>(); Set applications = project.getApplications(); for (Application application : applications) { - for (String dependencyString : application.getDependencies()) { - Dependency dependency = ConverterUtils.convertDependency(dependencyString); - - if (!dependencies.containsKey(dependencyString)) { - dependencies.put(dependencyString, DependencyDto.builder() - .packageName(dependency.packageId()) - .artifactName(dependency.name()) - .version(dependency.version()).build()); + if (application.getType() != ApplicationType.BOM) { + for (DependencyEntity dependency : application.getFullDependencies()) { + String dependencyString = ConverterUtils.getDependencyFormatted(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion()); + if (!dependencies.containsKey(dependencyString)) { + dependencies.put(dependencyString, DependencyDto.builder() + .packageName(dependency.getGroupId()) + .artifactName(dependency.getArtifactId()) + .version(dependency.getVersion()).build()); + } + dependencies.get(dependencyString).getUsageOf().add(application.getName()); + } + } + } + + ProjectVersion projectVersion = project.getProjectVersion(); + ProjectVersionLiteDto projectVersionLiteDto = modelMapper.map(projectVersion, ProjectVersionLiteDto.class); + return ProjectDependenciesDto.builder() + .id(project.getId()) + .version(project.getVersion()) + .dependencies(new HashSet<>(dependencies.values())) + .projectVersion(projectVersionLiteDto).build(); + } + + @Transactional(readOnly = true) + public ProjectDependenciesDto getImplicitDependencies(int id) { + Project project = getById(id); + + Map dependencies = new HashMap<>(); + Set applications = project.getApplications(); + for (Application application : applications) { + if (application.getType() != ApplicationType.BOM) { + for (String dependencyString : application.getDependencies()) { + + Set dependencyManagements = application.getDependencyManagements().stream() + .map(DependencyManagement::getDependencies) + .flatMap(List::stream).collect(Collectors.toSet()); + + if (!dependencyManagements.contains(dependencyString)) { + Dependency dependency = ConverterUtils.convertDependency(dependencyString); + + if (!dependencies.containsKey(dependencyString)) { + dependencies.put(dependencyString, DependencyDto.builder() + .packageName(dependency.packageId()) + .artifactName(dependency.name()) + .version(dependency.version()).build()); + } + dependencies.get(dependencyString).getUsageOf().add(application.getName()); + } + } + } + } + + ProjectVersion projectVersion = project.getProjectVersion(); + ProjectVersionLiteDto projectVersionLiteDto = modelMapper.map(projectVersion, ProjectVersionLiteDto.class); + return ProjectDependenciesDto.builder() + .id(project.getId()) + .version(project.getVersion()) + .dependencies(new HashSet<>(dependencies.values())) + .projectVersion(projectVersionLiteDto).build(); + } + + @Transactional(readOnly = true) + public ProjectDependenciesDto getDirectDependencies(int id) { + Project project = getById(id); + + Map dependencies = new HashMap<>(); + Set applications = project.getApplications(); + for (Application application : applications) { + if (application.getType() != ApplicationType.BOM) { + for (String dependencyString : application.getDependencies()) { + + Dependency dependency = ConverterUtils.convertDependency(dependencyString); + + if (!dependencies.containsKey(dependencyString)) { + dependencies.put(dependencyString, DependencyDto.builder() + .packageName(dependency.packageId()) + .artifactName(dependency.name()) + .version(dependency.version()).build()); + } + dependencies.get(dependencyString).getUsageOf().add(application.getName()); } - dependencies.get(dependencyString).getUsageOf().add(application.getName()); } } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderService.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderService.java index 3f14364..07cfc66 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderService.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderService.java @@ -25,6 +25,8 @@ public abstract class ProjectLoaderService { public static final String APPLICATIONS_FOLDER = "applications"; public static final String LIBRARIES_FOLDER = "libraries"; + + public static final String BOMS_FOLDER = "boms"; public static final String PROJECT_CONFIG_YAML = "project-config.yaml"; protected final MicroserviceVisualizationProperties properties; @@ -176,7 +178,30 @@ protected Application convertApplicationDependencyToApplication(ApplicationDepen application.setGroup(applicationDependency.group()); application.setVersion(applicationDependency.version()); application.setDependencies(applicationDependency.dependencies()); - application.setManagementDependencies(applicationDependency.managementDependencies()); + + Set dependencyManagements; + + if (!CollectionUtils.isEmpty(applicationDependency.dependencyManagement())) { + application.setDependencyManagements(applicationDependency.dependencyManagement().entrySet().stream() + .map(entry -> ConverterUtils.mapToDependencyManagement(entry.getKey(), entry.getValue())).collect(Collectors.toList())); + + dependencyManagements = application.getDependencyManagements().stream() + .map(DependencyManagement::getDependencies) + .flatMap(List::stream).collect(Collectors.toSet()); + } else { + dependencyManagements = new HashSet<>(); + } + + if (!CollectionUtils.isEmpty(applicationDependency.fullDependencies())) { + application.setFullDependencies(applicationDependency.fullDependencies().stream() + .map(dependencyString -> getDependencyEntity(dependencyString, dependencyManagements)) + .collect(Collectors.toList())); + } else if (!CollectionUtils.isEmpty(applicationDependency.dependencies())) { + application.setFullDependencies(applicationDependency.dependencies().stream() + .map(dependencyString -> getDependencyEntity(dependencyString, dependencyManagements)) + .collect(Collectors.toList())); + } + Map tags = new HashMap<>(applicationDependency.tags()); Map relevantTags = properties.getTags(); @@ -191,6 +216,15 @@ protected Application convertApplicationDependencyToApplication(ApplicationDepen return application; } + private static DependencyEntity getDependencyEntity(String dependencyString, Set dependencyManagements) { + Dependency dep = ConverterUtils.convertDependency(dependencyString); + return DependencyEntity.builder() + .groupId(dep.packageId()) + .artifactId(dep.name()) + .version(dep.version()) + .implicit(dependencyManagements.contains(dependencyString)).build(); + } + /** * Find application relevant tags */ diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderType.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderType.java index 6d9fc8b..5be24ab 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderType.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/ProjectLoaderType.java @@ -2,5 +2,6 @@ public enum ProjectLoaderType { local, - github, bitbucket + github, + bitbucket } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/bitbucket/BitbucketProjectLoaderService.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/bitbucket/BitbucketProjectLoaderService.java index 5241cd4..0e0909e 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/bitbucket/BitbucketProjectLoaderService.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/bitbucket/BitbucketProjectLoaderService.java @@ -56,8 +56,11 @@ private Project getProjectByVersion(LoaderDetails loaderDetails, String versionI List libraryDependencies = getApplicationsByFolder(loaderDetails, versionId, api, ProjectLoaderService.LIBRARIES_FOLDER, ApplicationType.LIBRARY); + List bomDependencies = getApplicationsByFolder(loaderDetails, versionId, api, ProjectLoaderService.BOMS_FOLDER, ApplicationType.BOM); + List dependencies = new ArrayList<>(applicationDependencies); dependencies.addAll(libraryDependencies); + dependencies.addAll(bomDependencies); setApplicationToProject(project, projectConfigByBranch, dependencies, versionId, version); return project; diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/github/GithubProjectLoaderService.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/github/GithubProjectLoaderService.java index 95d3071..dbd0de6 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/github/GithubProjectLoaderService.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/github/GithubProjectLoaderService.java @@ -71,8 +71,10 @@ private Project getProjectByVersion(String versionId, String version, GHReposito List applicationDependencies = getApplicationsByFolder(projectRepository, versionId, ProjectLoaderService.APPLICATIONS_FOLDER, ApplicationType.MICROSERVICE); List libraryDependencies = getApplicationsByFolder(projectRepository, versionId, ProjectLoaderService.LIBRARIES_FOLDER, ApplicationType.LIBRARY); + List bomDependencies = getApplicationsByFolder(projectRepository, versionId, ProjectLoaderService.BOMS_FOLDER, ApplicationType.BOM); List dependencies = new ArrayList<>(applicationDependencies); dependencies.addAll(libraryDependencies); + dependencies.addAll(bomDependencies); setApplicationToProject(project, projectConfigByBranch, dependencies, versionId, version); } catch (IOException e) { throw new RuntimeException(e); diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/local/LocalProjectLoaderService.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/local/LocalProjectLoaderService.java index c715b63..1ccc82f 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/local/LocalProjectLoaderService.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/loaders/local/LocalProjectLoaderService.java @@ -51,8 +51,10 @@ public Project getProjectVersion(LoaderDetails loaderDetails, String versionId, ProjectConfig projectConfiguration = getProjectConfiguration(Paths.get(MessageFormat.format("{0}/{1}", dir, PROJECT_CONFIG_YAML))); List applicationDependencies = getApplicationsByType(dir, APPLICATIONS_FOLDER, ApplicationType.MICROSERVICE); List libraryDependencies = getApplicationsByType(dir, LIBRARIES_FOLDER, ApplicationType.LIBRARY); + List bomDependencies = getApplicationsByType(dir, BOMS_FOLDER, ApplicationType.BOM); List dependencies = new ArrayList<>(applicationDependencies); dependencies.addAll(libraryDependencies); + dependencies.addAll(bomDependencies); setApplicationToProject(project, projectConfiguration, dependencies, versionId, version); return project; diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/model/ApplicationDependency.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/model/ApplicationDependency.java index 15e18d7..5359e36 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/model/ApplicationDependency.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/service/model/ApplicationDependency.java @@ -16,6 +16,8 @@ public record ApplicationDependency( String owner, Map tags, List dependencies, - List managementDependencies + List fullDependencies, + List managementDependencies, + Map> dependencyManagement ) { } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/utils/ConverterUtils.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/utils/ConverterUtils.java index 1456f5a..02b8ac0 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/utils/ConverterUtils.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/utils/ConverterUtils.java @@ -1,22 +1,56 @@ package com.github.rbaul.microservice_visualization.utils; +import com.github.rbaul.microservice_visualization.domain.model.DependencyManagement; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; +import java.util.Map; +import java.util.stream.Collectors; + @Slf4j @UtilityClass public class ConverterUtils { - - /** - * Convert from "org.springframework.boot:spring-boot-starter-amqp:2.7.10" to Object - */ - public static Dependency convertDependency(String dependency) { - String[] split = dependency.split(":"); - if (split.length == 3) { - return new Dependency(split[0], split[1], split[2]); - } else { // Local Dependency - return new Dependency(null, split[1], null); - } - } - + + /** + * Convert from "org.springframework.boot:spring-boot-starter-amqp:2.7.10" to Object + */ + public static Dependency convertDependency(String dependency) { + String[] split = dependency.split(":"); + if (split.length == 3) { + return new Dependency(split[0], split[1], split[2]); + } else { // Local Dependency + return new Dependency(null, split[1], null); + } + } + + /** + * Convert from "org.springframework.boot:spring-boot-starter-amqp" -> "2.7.10" to Object + */ + public static Dependency convertDependency(String dependency, String version) { + String[] split = dependency.split(":"); + if (split.length == 2) { + return new Dependency(split[0], split[1], version); + } else { // Local Dependency + return new Dependency(null, split[1], version); + } + } + + /** + * Convert to Dependency Management + */ + public static DependencyManagement mapToDependencyManagement(String dependencyManagement, Map dependencyManagementVersions) { + Dependency dependency = convertDependency(dependencyManagement); + return DependencyManagement.builder() + .groupId(dependency.packageId()) + .artifactId(dependency.name()) + .version(dependency.version()) + .dependencies(dependencyManagementVersions.entrySet().stream() + .map(entry -> String.format("%s:%s", entry.getKey(), entry.getValue())) + .collect(Collectors.toList())).build(); + } + + + public static String getDependencyFormatted(String ...array) { + return String.join(":", array); + } } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/controller/ProjectController.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/controller/ProjectController.java index ca1bb2a..07e5b18 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/controller/ProjectController.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/controller/ProjectController.java @@ -49,4 +49,14 @@ public Page fetch(@RequestParam("projectVersionId") int projectV public ProjectDependenciesDto getDependencies(@PathVariable("id") int id) { return projectService.getDependencies(id); } + + @GetMapping("/{id}/dependencies/implicit") + public ProjectDependenciesDto getImplicitDependencies(@PathVariable("id") int id) { + return projectService.getImplicitDependencies(id); + } + + @GetMapping("/{id}/dependencies/direct") + public ProjectDependenciesDto getDirectDependencies(@PathVariable("id") int id) { + return projectService.getDirectDependencies(id); + } } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/ApplicationFullDto.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/ApplicationFullDto.java index c1f89d2..4cf1c39 100644 --- a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/ApplicationFullDto.java +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/ApplicationFullDto.java @@ -20,4 +20,6 @@ public class ApplicationFullDto extends ApplicationLiteDto { private List dependencies; private List managementDependencies; + + private List dependencyManagements; } diff --git a/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/DependencyManagementDto.java b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/DependencyManagementDto.java new file mode 100644 index 0000000..782b247 --- /dev/null +++ b/microservice-visualization/src/main/java/com/github/rbaul/microservice_visualization/web/dto/DependencyManagementDto.java @@ -0,0 +1,19 @@ +package com.github.rbaul.microservice_visualization.web.dto; + +import lombok.*; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@Getter +@Setter +@ToString +public class DependencyManagementDto { + private String groupId; + private String artifactId; + private String version; + private List dependencies; +} diff --git a/microservice-visualization/src/test/java/com/github/rbaul/microservice_visualization/DependenciesConvertTests.java b/microservice-visualization/src/test/java/com/github/rbaul/microservice_visualization/DependenciesConvertTests.java new file mode 100644 index 0000000..1fa5244 --- /dev/null +++ b/microservice-visualization/src/test/java/com/github/rbaul/microservice_visualization/DependenciesConvertTests.java @@ -0,0 +1,35 @@ +package com.github.rbaul.microservice_visualization; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.rbaul.microservice_visualization.service.model.ApplicationDependency; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Import; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +@Import(ObjectMapper.class) +@ExtendWith({SpringExtension.class}) +public class DependenciesConvertTests { + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private ResourceLoader resourceLoader; + + @Test + @DisplayName("Validate dependencies files") + void validateDependenciesFile() throws IOException { + Resource resource = new ClassPathResource("basket.json"); + objectMapper.readValue(resource.getContentAsString(StandardCharsets.UTF_8), ApplicationDependency.class); + } +} diff --git a/microservice-visualization/src/test/resources/basket.json b/microservice-visualization/src/test/resources/basket.json new file mode 100644 index 0000000..2a16ad1 --- /dev/null +++ b/microservice-visualization/src/test/resources/basket.json @@ -0,0 +1,196 @@ +{ + "name": "basket", + "label": "Basket", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", + "description": "Basket application", + "type": "microservice", + "owner": "Team 1", + "tags": { + "java": "17", + "gradle": "8.5", + "Overridden by dependencies": true + }, + "dependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "com.demo:basket-api:0.0.1-SNAPSHOT" + ], + "fullDependencies": [ + "com.demo:basket-api:0.0.1-SNAPSHOT", + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-starter-json:2.7.10", + "org.springframework.boot:spring-boot-starter-aop:2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.10", + "org.springframework.boot:spring-boot-starter:2.7.10", + "org.springframework.amqp:spring-rabbit:2.4.11", + "org.springframework:spring-messaging:5.3.26", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.10", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.73", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.26", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.26", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.hibernate:hibernate-core:5.6.15.Final", + "org.springframework.data:spring-data-jpa:2.7.10", + "org.springframework:spring-aspects:5.3.26", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.10", + "io.micrometer:micrometer-core:1.9.9", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:2.7.10", + "org.springframework.boot:spring-boot-actuator:2.7.10", + "org.springframework.boot:spring-boot:2.7.10", + "org.springframework.boot:spring-boot-starter-logging:2.7.10", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework:spring-context:5.3.26", + "org.springframework:spring-orm:5.3.26", + "org.springframework:spring-jdbc:5.3.26", + "org.springframework:spring-tx:5.3.26", + "org.springframework:spring-aop:5.3.26", + "org.springframework.data:spring-data-commons:2.7.10", + "org.springframework:spring-beans:5.3.26", + "org.springframework.amqp:spring-amqp:2.4.11", + "org.springframework:spring-expression:5.3.26", + "org.springframework:spring-core:5.3.26", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5", + "com.fasterxml.jackson.core:jackson-databind:2.13.5", + "com.fasterxml.jackson.core:jackson-core:2.13.5", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.73", + "org.aspectj:aspectjweaver:1.9.7", + "com.zaxxer:HikariCP:4.0.3", + "net.bytebuddy:byte-buddy:1.12.23", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.8", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "org.slf4j:slf4j-api:1.7.36", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "org.springframework:spring-jcl:5.3.26", + "org.springframework.retry:spring-retry:1.3.1", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.glassfish.jaxb:txw2:2.3.8", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8" + ], + "managementDependencies": [ + "org.springframework.boot:spring-boot-dependencies:2.7.10", + "org.springframework.cloud:spring-cloud-dependencies:2022.0.2" + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.10": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.23", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.8", + "org.glassfish.jaxb:txw2": "2.3.8", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.15.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.10", + "org.springframework.boot:spring-boot-actuator": "2.7.10", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-starter": "2.7.10", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.10", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.10", + "org.springframework.boot:spring-boot-starter-aop": "2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.10", + "org.springframework.boot:spring-boot-starter-json": "2.7.10", + "org.springframework.boot:spring-boot-starter-logging": "2.7.10", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.10", + "org.springframework.boot:spring-boot-starter-validation": "2.7.10", + "org.springframework.boot:spring-boot-starter-web": "2.7.10", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.11", + "org.springframework.amqp:spring-rabbit": "2.4.11", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.73", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.5", + "com.fasterxml.jackson.core:jackson-core": "2.13.5", + "com.fasterxml.jackson.core:jackson-databind": "2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.5", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.9", + "org.springframework.data:spring-data-commons": "2.7.10", + "org.springframework.data:spring-data-jpa": "2.7.10", + "org.springframework:spring-aop": "5.3.26", + "org.springframework:spring-aspects": "5.3.26", + "org.springframework:spring-beans": "5.3.26", + "org.springframework:spring-context": "5.3.26", + "org.springframework:spring-core": "5.3.26", + "org.springframework:spring-expression": "5.3.26", + "org.springframework:spring-jcl": "5.3.26", + "org.springframework:spring-jdbc": "5.3.26", + "org.springframework:spring-messaging": "5.3.26", + "org.springframework:spring-orm": "5.3.26", + "org.springframework:spring-tx": "5.3.26", + "org.springframework:spring-web": "5.3.26", + "org.springframework:spring-webmvc": "5.3.26" + }, + "org.springframework.cloud:spring-cloud-dependencies:2022.0.2": { + "org.springframework.retry:spring-retry": "1.3.1" + } + } +} \ No newline at end of file diff --git a/plugins/gradle/dependencies-util.gradle b/plugins/gradle/dependencies-util.gradle index b75ccca..a928073 100644 --- a/plugins/gradle/dependencies-util.gradle +++ b/plugins/gradle/dependencies-util.gradle @@ -1,7 +1,13 @@ import groovy.json.JsonOutput -static def getDependencyFormatted(String group, String name, String version) { - return String.format("%s:%s:%s", group, name, version) +static def getDependencyFormatted(String... array) { + return String.join(":", array) +} + +static def convertMapToList(Map dependencies) { + return dependencies.collect { + getDependencyFormatted(it.getKey(), it.getValue()) + } } static def stringToLabel(String string) { @@ -23,33 +29,103 @@ def getJavaVersion() { } def getFirstLevelModuleDependencies() { - return configurations.runtimeClasspath.resolvedConfiguration.getFirstLevelModuleDependencies().collect { + Map dependencies = [:] + + configurations.runtimeClasspath.resolvedConfiguration.getFirstLevelModuleDependencies().each { // [ // groupId: it.getModuleGroup(), // artifactId: it.getModuleName(), // version: it.getModuleVersion() // ] - getDependencyFormatted(it.getModuleGroup(), it.getModuleName(), it.getModuleVersion()) + // Project modules + if (it.parentArtifacts.toString().contains('project :')) { + it.children.each { ch -> + dependencies.put(getDependencyFormatted(ch.getModuleGroup(), ch.getModuleName()), ch.getModuleVersion()) + } + } + dependencies.put(getDependencyFormatted(it.getModuleGroup(), it.getModuleName()), it.getModuleVersion()) } + + return dependencies } -def getManagementDependencies() { +def getAllDependencies() { + Map dependencies = [:] + + configurations.runtimeClasspath.resolvedConfiguration.getResolvedArtifacts().each { + dependencies.put(getDependencyFormatted(it.owner.id.group, it.owner.id.name), it.owner.version) + } + + return dependencies + +// return configurations.runtimeClasspath.resolvedConfiguration.getResolvedArtifacts().collect{it.owner.toString()} +} + +Map getManagementDependencies(Map dependencies) { + if (!project.hasProperty('dependencyManagement')) { + return [:] + } + + Map bomDetails = [:] + + def boms = dependencyManagement.getPomConfigurer().dependencyManagement.importedBoms + if (boms.size() > 0) { + def poms = dependencyManagement.getPomConfigurer().dependencyManagement.pomResolver.resolvePoms(boms, boms[0].getProperties()) + poms.each { + + def pomCoordinates = getDependencyFormatted(it.getCoordinates().groupId, it.getCoordinates().artifactId, it.getCoordinates().version) + Map dependency = [:] + it.getManagedDependencies().each { + def dependencyVersion = getDependencyFormatted(it.getCoordinates().groupId, it.getCoordinates().artifactId) + if (dependencies.containsKey(dependencyVersion)) { + dependency.put(dependencyVersion, it.getCoordinates().version) + } + } + + bomDetails.put(pomCoordinates, dependency) + } + } + + return bomDetails +} + +def getManagementDependenciesExplicit() { if (!project.hasProperty('dependencyManagement')) { return [] } - return dependencyManagement.getPomConfigurer().dependencyManagement.importedBoms.collect { - getDependencyFormatted(it.coordinates.groupId, it.coordinates.artifactId, it.coordinates.version) + + def versionsMap = [:] + + if (project.hasProperty('dependencyVersions')) { + dependencyVersions.each { key, val -> + def newKey = "\${$key}" + versionsMap[newKey] = val + } + } + + return dependencyManagement.getPomConfigurer().dependencyManagement.explicitVersions.collect { key, val -> + final def version = versionsMap.containsKey(val) ? versionsMap.get(val) : val + final def split = key.split(':') + final def groupId = split[0] + final def artifactId = split[1] + return getDependencyFormatted(groupId, artifactId, version) } } def getApplicationJson() { - def dependencies = getFirstLevelModuleDependencies() - def managementDependencies = getManagementDependencies() + def directDependenciesMap = getFirstLevelModuleDependencies() + def fullDependenciesMap = getAllDependencies() + + def directDependencies = convertMapToList(directDependenciesMap) + def fullDependencies = convertMapToList(fullDependenciesMap) + + def managementDependencies = getManagementDependencies(fullDependenciesMap) + def managementDependenciesExplicit = getManagementDependenciesExplicit() Map app = [ - name: project.getName(), - label: getApplicationExtProperty('name', stringToLabel(project.getName())), - group: project.getGroup(), + name : project.getName(), + label : getApplicationExtProperty('name', stringToLabel(project.getName())), + group : project.getGroup(), version: project.getVersion() ] @@ -59,6 +135,12 @@ def getApplicationJson() { app.put('description', description) } + // Type + String type = getApplicationExtProperty('type', null) + if (type != null) { + app.put('type', type) + } + // Owner String owner = getApplicationExtProperty('ownerName', null) if (owner != null) { @@ -72,16 +154,26 @@ def getApplicationJson() { } app.put('tags', [ - java: getJavaVersion(), - gradle: project.getGradle().getGradleVersion() + java : getJavaVersion(), + gradle : project.getGradle().getGradleVersion(), + 'Overridden by dependencies': !(project.hasProperty('dependencyManagement') && !dependencyManagement.dependencyManagementSettings.overriddenByDependencies) ]) - if (dependencies.size() > 0) { - app.put('dependencies', dependencies) + if (directDependencies.size() > 0) { + app.put('dependencies', directDependencies) + } + + if (fullDependencies.size() > 0) { + app.put('fullDependencies', fullDependencies) } if (managementDependencies.size() > 0) { - app.put('managementDependencies', managementDependencies) + app.put('managementDependencies', managementDependencies.collect { it.getKey() }) + app.put('dependencyManagement', managementDependencies) + } + + if (type == 'bom' && managementDependenciesExplicit.size() > 0) { + app.put('dependencies', managementDependenciesExplicit) } return app } diff --git a/result/app-bom.json b/result/app-bom.json new file mode 100644 index 0000000..d91bd6a --- /dev/null +++ b/result/app-bom.json @@ -0,0 +1,20 @@ +{ + "name": "app-bom", + "label": "Application BOM", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", + "description": "Application BOM", + "type": "bom", + "owner": "Team 1", + "tags": { + "java": "17", + "gradle": "8.5", + "Overridden by dependencies": true + }, + "dependencies": [ + "commons-io:commons-io:2.11.0", + "org.apache.commons:commons-collections4:4.4", + "com.google.guava:guava:31.1-jre", + "org.jgrapht:jgrapht-core:1.5.1" + ] +} \ No newline at end of file diff --git a/result/basket-api.json b/result/basket-api.json new file mode 100644 index 0000000..0b5a8c7 --- /dev/null +++ b/result/basket-api.json @@ -0,0 +1,189 @@ +{ + "name": "basket-api", + "label": "Basket API", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", + "type": "library", + "owner": "Team 1", + "tags": { + "java": "17", + "gradle": "8.5", + "Overridden by dependencies": true + }, + "dependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214" + ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-starter-json:2.7.10", + "org.springframework.boot:spring-boot-starter-aop:2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.10", + "org.springframework.boot:spring-boot-starter:2.7.10", + "org.springframework.amqp:spring-rabbit:2.4.11", + "org.springframework:spring-messaging:5.3.26", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.10", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.73", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.26", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.26", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.hibernate:hibernate-core:5.6.15.Final", + "org.springframework.data:spring-data-jpa:2.7.10", + "org.springframework:spring-aspects:5.3.26", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.10", + "io.micrometer:micrometer-core:1.9.9", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:2.7.10", + "org.springframework.boot:spring-boot-actuator:2.7.10", + "org.springframework.boot:spring-boot:2.7.10", + "org.springframework.boot:spring-boot-starter-logging:2.7.10", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework:spring-context:5.3.26", + "org.springframework:spring-orm:5.3.26", + "org.springframework:spring-jdbc:5.3.26", + "org.springframework:spring-tx:5.3.26", + "org.springframework:spring-aop:5.3.26", + "org.springframework.data:spring-data-commons:2.7.10", + "org.springframework:spring-beans:5.3.26", + "org.springframework.amqp:spring-amqp:2.4.11", + "org.springframework:spring-expression:5.3.26", + "org.springframework:spring-core:5.3.26", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5", + "com.fasterxml.jackson.core:jackson-databind:2.13.5", + "com.fasterxml.jackson.core:jackson-core:2.13.5", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.73", + "org.aspectj:aspectjweaver:1.9.7", + "com.zaxxer:HikariCP:4.0.3", + "net.bytebuddy:byte-buddy:1.12.23", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.8", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "org.slf4j:slf4j-api:1.7.36", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "org.springframework:spring-jcl:5.3.26", + "org.springframework.retry:spring-retry:1.3.4", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.glassfish.jaxb:txw2:2.3.8", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8" + ], + "managementDependencies": [ + "org.springframework.boot:spring-boot-dependencies:2.7.10" + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.10": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.23", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.8", + "org.glassfish.jaxb:txw2": "2.3.8", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.15.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.10", + "org.springframework.boot:spring-boot-actuator": "2.7.10", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-starter": "2.7.10", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.10", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.10", + "org.springframework.boot:spring-boot-starter-aop": "2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.10", + "org.springframework.boot:spring-boot-starter-json": "2.7.10", + "org.springframework.boot:spring-boot-starter-logging": "2.7.10", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.10", + "org.springframework.boot:spring-boot-starter-validation": "2.7.10", + "org.springframework.boot:spring-boot-starter-web": "2.7.10", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.11", + "org.springframework.amqp:spring-rabbit": "2.4.11", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.73", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.5", + "com.fasterxml.jackson.core:jackson-core": "2.13.5", + "com.fasterxml.jackson.core:jackson-databind": "2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.5", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.9", + "org.springframework.data:spring-data-commons": "2.7.10", + "org.springframework.data:spring-data-jpa": "2.7.10", + "org.springframework:spring-aop": "5.3.26", + "org.springframework:spring-aspects": "5.3.26", + "org.springframework:spring-beans": "5.3.26", + "org.springframework:spring-context": "5.3.26", + "org.springframework:spring-core": "5.3.26", + "org.springframework:spring-expression": "5.3.26", + "org.springframework:spring-jcl": "5.3.26", + "org.springframework:spring-jdbc": "5.3.26", + "org.springframework:spring-messaging": "5.3.26", + "org.springframework:spring-orm": "5.3.26", + "org.springframework:spring-tx": "5.3.26", + "org.springframework:spring-web": "5.3.26", + "org.springframework:spring-webmvc": "5.3.26" + } + } +} \ No newline at end of file diff --git a/result/basket.json b/result/basket.json index f54eec6..2a16ad1 100644 --- a/result/basket.json +++ b/result/basket.json @@ -1,11 +1,15 @@ { "name": "basket", "label": "Basket", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Basket application", + "type": "microservice", "owner": "Team 1", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:2.7.10", @@ -15,11 +19,178 @@ "org.springframework.boot:spring-boot-starter-actuator:2.7.10", "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "com.demo:basket-api:0.0.1-SNAPSHOT" + ], + "fullDependencies": [ "com.demo:basket-api:0.0.1-SNAPSHOT", - "com.h2database:h2:2.1.214" + "org.springframework.boot:spring-boot-starter-amqp:2.7.10", + "org.springframework.boot:spring-boot-starter-validation:2.7.10", + "org.springframework.boot:spring-boot-starter-web:2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.10", + "org.springframework.boot:spring-boot-starter-actuator:2.7.10", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-starter-json:2.7.10", + "org.springframework.boot:spring-boot-starter-aop:2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.10", + "org.springframework.boot:spring-boot-starter:2.7.10", + "org.springframework.amqp:spring-rabbit:2.4.11", + "org.springframework:spring-messaging:5.3.26", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.10", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.73", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.26", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.26", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.hibernate:hibernate-core:5.6.15.Final", + "org.springframework.data:spring-data-jpa:2.7.10", + "org.springframework:spring-aspects:5.3.26", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.10", + "io.micrometer:micrometer-core:1.9.9", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:2.7.10", + "org.springframework.boot:spring-boot-actuator:2.7.10", + "org.springframework.boot:spring-boot:2.7.10", + "org.springframework.boot:spring-boot-starter-logging:2.7.10", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework:spring-context:5.3.26", + "org.springframework:spring-orm:5.3.26", + "org.springframework:spring-jdbc:5.3.26", + "org.springframework:spring-tx:5.3.26", + "org.springframework:spring-aop:5.3.26", + "org.springframework.data:spring-data-commons:2.7.10", + "org.springframework:spring-beans:5.3.26", + "org.springframework.amqp:spring-amqp:2.4.11", + "org.springframework:spring-expression:5.3.26", + "org.springframework:spring-core:5.3.26", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5", + "com.fasterxml.jackson.core:jackson-databind:2.13.5", + "com.fasterxml.jackson.core:jackson-core:2.13.5", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.5", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.73", + "org.aspectj:aspectjweaver:1.9.7", + "com.zaxxer:HikariCP:4.0.3", + "net.bytebuddy:byte-buddy:1.12.23", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.8", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "org.slf4j:slf4j-api:1.7.36", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "org.springframework:spring-jcl:5.3.26", + "org.springframework.retry:spring-retry:1.3.1", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.glassfish.jaxb:txw2:2.3.8", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8" ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:2.7.10", "org.springframework.cloud:spring-cloud-dependencies:2022.0.2" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.10": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.23", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.8", + "org.glassfish.jaxb:txw2": "2.3.8", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.15.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.10", + "org.springframework.boot:spring-boot-actuator": "2.7.10", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.10", + "org.springframework.boot:spring-boot-starter": "2.7.10", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.10", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.10", + "org.springframework.boot:spring-boot-starter-aop": "2.7.10", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.10", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.10", + "org.springframework.boot:spring-boot-starter-json": "2.7.10", + "org.springframework.boot:spring-boot-starter-logging": "2.7.10", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.10", + "org.springframework.boot:spring-boot-starter-validation": "2.7.10", + "org.springframework.boot:spring-boot-starter-web": "2.7.10", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.11", + "org.springframework.amqp:spring-rabbit": "2.4.11", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.73", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.73", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.5", + "com.fasterxml.jackson.core:jackson-core": "2.13.5", + "com.fasterxml.jackson.core:jackson-databind": "2.13.5", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.5", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.5", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.5", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.9", + "org.springframework.data:spring-data-commons": "2.7.10", + "org.springframework.data:spring-data-jpa": "2.7.10", + "org.springframework:spring-aop": "5.3.26", + "org.springframework:spring-aspects": "5.3.26", + "org.springframework:spring-beans": "5.3.26", + "org.springframework:spring-context": "5.3.26", + "org.springframework:spring-core": "5.3.26", + "org.springframework:spring-expression": "5.3.26", + "org.springframework:spring-jcl": "5.3.26", + "org.springframework:spring-jdbc": "5.3.26", + "org.springframework:spring-messaging": "5.3.26", + "org.springframework:spring-orm": "5.3.26", + "org.springframework:spring-tx": "5.3.26", + "org.springframework:spring-web": "5.3.26", + "org.springframework:spring-webmvc": "5.3.26" + }, + "org.springframework.cloud:spring-cloud-dependencies:2022.0.2": { + "org.springframework.retry:spring-retry": "1.3.1" + } + } } \ No newline at end of file diff --git a/result/customer.json b/result/customer.json index 5ff80fc..9f3aad4 100644 --- a/result/customer.json +++ b/result/customer.json @@ -1,11 +1,15 @@ { "name": "customer", "label": "Customer", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Customer application", + "type": "microservice", "owner": "Team 1", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:2.7.5", @@ -14,10 +18,193 @@ "org.springframework.boot:spring-boot-starter-web:2.7.5", "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-actuator:2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.5", + "com.h2database:h2:2.1.214", "com.demo:basket-api:0.0.1-SNAPSHOT" ], + "fullDependencies": [ + "com.demo:basket-api:0.0.1-SNAPSHOT", + "org.springframework.boot:spring-boot-starter-amqp:2.7.5", + "org.springframework.boot:spring-boot-starter-data-mongodb:2.7.5", + "org.springframework.boot:spring-boot-starter-validation:2.7.5", + "org.springframework.boot:spring-boot-starter-web:2.7.5", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-json:2.7.5", + "org.springframework.boot:spring-boot-starter-actuator:2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa:2.7.5", + "org.springframework.boot:spring-boot-starter-aop:2.7.5", + "org.springframework.boot:spring-boot-starter-jdbc:2.7.5", + "org.springframework.boot:spring-boot-starter:2.7.5", + "org.springframework.amqp:spring-rabbit:2.4.7", + "org.springframework:spring-messaging:5.3.23", + "org.mongodb:mongodb-driver-sync:4.6.1", + "org.springframework.data:spring-data-mongodb:3.4.5", + "org.springframework.boot:spring-boot-starter-tomcat:2.7.5", + "org.apache.tomcat.embed:tomcat-embed-el:9.0.68", + "org.hibernate.validator:hibernate-validator:6.2.5.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:5.3.23", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:5.3.23", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.50", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "com.h2database:h2:2.1.214", + "org.springframework.boot:spring-boot-actuator-autoconfigure:2.7.5", + "org.springframework.boot:spring-boot-autoconfigure:2.7.5", + "org.springframework.boot:spring-boot-actuator:2.7.5", + "org.springframework.boot:spring-boot:2.7.5", + "org.springframework.boot:spring-boot-starter-logging:2.7.5", + "jakarta.annotation:jakarta.annotation-api:1.3.5", + "org.springframework.data:spring-data-jpa:2.7.5", + "org.springframework:spring-context:5.3.23", + "org.springframework:spring-orm:5.3.23", + "org.springframework:spring-jdbc:5.3.23", + "org.springframework:spring-tx:5.3.23", + "org.springframework.data:spring-data-commons:2.7.5", + "org.springframework:spring-aop:5.3.23", + "org.springframework:spring-beans:5.3.23", + "org.springframework.amqp:spring-amqp:2.4.7", + "org.springframework:spring-expression:5.3.23", + "org.springframework:spring-core:5.3.23", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.4", + "com.fasterxml.jackson.core:jackson-databind:2.13.4.2", + "com.fasterxml.jackson.core:jackson-core:2.13.4", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.13.4", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.4", + "org.yaml:snakeyaml:1.30", + "com.rabbitmq:amqp-client:5.14.2", + "org.mongodb:mongodb-driver-core:4.6.1", + "org.mongodb:bson-record-codec:4.6.1", + "org.mongodb:bson:4.6.1", + "ch.qos.logback:logback-classic:1.2.11", + "org.apache.logging.log4j:log4j-to-slf4j:2.17.2", + "org.slf4j:jul-to-slf4j:1.7.36", + "com.zaxxer:HikariCP:4.0.3", + "org.slf4j:slf4j-api:1.7.36", + "jakarta.validation:jakarta.validation-api:2.0.2", + "org.hibernate:hibernate-core:5.6.12.Final", + "org.hibernate.common:hibernate-commons-annotations:5.1.2.Final", + "org.jboss.logging:jboss-logging:3.4.3.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.68", + "org.apache.tomcat.embed:tomcat-embed-core:9.0.68", + "jakarta.transaction:jakarta.transaction-api:1.3.3", + "jakarta.persistence:jakarta.persistence-api:2.2.3", + "org.springframework:spring-aspects:5.3.23", + "io.micrometer:micrometer-core:1.9.5", + "org.springframework:spring-jcl:5.3.23", + "org.springframework.retry:spring-retry:1.3.1", + "org.aspectj:aspectjweaver:1.9.7", + "net.bytebuddy:byte-buddy:1.12.18", + "antlr:antlr:2.7.7", + "org.jboss:jandex:2.4.2.Final", + "org.glassfish.jaxb:jaxb-runtime:2.3.7", + "org.hdrhistogram:HdrHistogram:2.1.12", + "org.latencyutils:LatencyUtils:2.0.3", + "ch.qos.logback:logback-core:1.2.11", + "org.apache.logging.log4j:log4j-api:2.17.2", + "jakarta.xml.bind:jakarta.xml.bind-api:2.3.3", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8", + "org.glassfish.jaxb:txw2:2.3.7", + "com.sun.istack:istack-commons-runtime:3.0.12", + "com.sun.activation:jakarta.activation:1.2.2", + "jakarta.activation:jakarta.activation-api:1.2.2" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:2.7.5", "org.springframework.cloud:spring-cloud-dependencies:2021.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:2.7.5": { + "antlr:antlr": "2.7.7", + "org.aspectj:aspectjweaver": "1.9.7", + "net.bytebuddy:byte-buddy": "1.12.18", + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.glassfish.jaxb:jaxb-runtime": "2.3.7", + "org.glassfish.jaxb:txw2": "2.3.7", + "com.h2database:h2": "2.1.214", + "org.hibernate:hibernate-core": "5.6.12.Final", + "org.hibernate.validator:hibernate-validator": "6.2.5.Final", + "com.zaxxer:HikariCP": "4.0.3", + "com.sun.activation:jakarta.activation": "1.2.2", + "jakarta.activation:jakarta.activation-api": "1.2.2", + "jakarta.annotation:jakarta.annotation-api": "1.3.5", + "jakarta.persistence:jakarta.persistence-api": "2.2.3", + "jakarta.transaction:jakarta.transaction-api": "1.3.3", + "jakarta.validation:jakarta.validation-api": "2.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "2.3.3", + "org.jboss.logging:jboss-logging": "3.4.3.Final", + "ch.qos.logback:logback-classic": "1.2.11", + "ch.qos.logback:logback-core": "1.2.11", + "org.mongodb:bson": "4.6.1", + "org.mongodb:mongodb-driver-core": "4.6.1", + "org.mongodb:mongodb-driver-sync": "4.6.1", + "com.rabbitmq:amqp-client": "5.14.2", + "org.springframework.boot:spring-boot": "2.7.5", + "org.springframework.boot:spring-boot-actuator": "2.7.5", + "org.springframework.boot:spring-boot-actuator-autoconfigure": "2.7.5", + "org.springframework.boot:spring-boot-autoconfigure": "2.7.5", + "org.springframework.boot:spring-boot-starter": "2.7.5", + "org.springframework.boot:spring-boot-starter-actuator": "2.7.5", + "org.springframework.boot:spring-boot-starter-amqp": "2.7.5", + "org.springframework.boot:spring-boot-starter-aop": "2.7.5", + "org.springframework.boot:spring-boot-starter-data-jpa": "2.7.5", + "org.springframework.boot:spring-boot-starter-data-mongodb": "2.7.5", + "org.springframework.boot:spring-boot-starter-jdbc": "2.7.5", + "org.springframework.boot:spring-boot-starter-json": "2.7.5", + "org.springframework.boot:spring-boot-starter-logging": "2.7.5", + "org.springframework.boot:spring-boot-starter-tomcat": "2.7.5", + "org.springframework.boot:spring-boot-starter-validation": "2.7.5", + "org.springframework.boot:spring-boot-starter-web": "2.7.5", + "org.slf4j:jul-to-slf4j": "1.7.36", + "org.slf4j:slf4j-api": "1.7.36", + "org.yaml:snakeyaml": "1.30", + "org.springframework.amqp:spring-amqp": "2.4.7", + "org.springframework.amqp:spring-rabbit": "2.4.7", + "org.springframework.retry:spring-retry": "1.3.4", + "org.apache.tomcat.embed:tomcat-embed-core": "9.0.68", + "org.apache.tomcat.embed:tomcat-embed-el": "9.0.68", + "org.apache.tomcat.embed:tomcat-embed-websocket": "9.0.68", + "org.webjars:webjars-locator-core": "0.50", + "com.fasterxml.jackson.core:jackson-annotations": "2.13.4", + "com.fasterxml.jackson.core:jackson-core": "2.13.4", + "com.fasterxml.jackson.core:jackson-databind": "2.13.4.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.13.4", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.13.4", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.13.4", + "org.apache.logging.log4j:log4j-api": "2.17.2", + "org.apache.logging.log4j:log4j-to-slf4j": "2.17.2", + "io.micrometer:micrometer-core": "1.9.5", + "org.springframework.data:spring-data-commons": "2.7.5", + "org.springframework.data:spring-data-jpa": "2.7.5", + "org.springframework.data:spring-data-mongodb": "3.4.5", + "org.springframework:spring-aop": "5.3.23", + "org.springframework:spring-aspects": "5.3.23", + "org.springframework:spring-beans": "5.3.23", + "org.springframework:spring-context": "5.3.23", + "org.springframework:spring-core": "5.3.23", + "org.springframework:spring-expression": "5.3.23", + "org.springframework:spring-jcl": "5.3.23", + "org.springframework:spring-jdbc": "5.3.23", + "org.springframework:spring-messaging": "5.3.23", + "org.springframework:spring-orm": "5.3.23", + "org.springframework:spring-tx": "5.3.23", + "org.springframework:spring-web": "5.3.23", + "org.springframework:spring-webmvc": "5.3.23" + }, + "org.springframework.cloud:spring-cloud-dependencies:2021.0.5": { + "org.springframework.retry:spring-retry": "1.3.1" + } + } } \ No newline at end of file diff --git a/result/ordering.json b/result/ordering.json index c0e3f53..642cc10 100644 --- a/result/ordering.json +++ b/result/ordering.json @@ -1,17 +1,105 @@ { "name": "ordering", "label": "Ordering", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Ordering application", + "type": "microservice", "owner": "Team 2", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-web:3.0.5", "org.springframework.boot:spring-boot-starter-validation:3.0.5" ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-web:3.0.5", + "org.springframework.boot:spring-boot-starter-validation:3.0.5", + "org.springframework.boot:spring-boot-starter-json:3.0.5", + "org.springframework.boot:spring-boot-starter:3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat:3.0.5", + "org.springframework:spring-webmvc:6.0.7", + "org.springframework:spring-web:6.0.7", + "org.apache.tomcat.embed:tomcat-embed-el:10.1.7", + "org.hibernate.validator:hibernate-validator:8.0.0.Final", + "org.springframework.boot:spring-boot-autoconfigure:3.0.5", + "org.springframework.boot:spring-boot:3.0.5", + "org.springframework.boot:spring-boot-starter-logging:3.0.5", + "jakarta.annotation:jakarta.annotation-api:2.1.1", + "org.springframework:spring-context:6.0.7", + "org.springframework:spring-aop:6.0.7", + "org.springframework:spring-beans:6.0.7", + "org.springframework:spring-expression:6.0.7", + "org.springframework:spring-core:6.0.7", + "org.yaml:snakeyaml:1.33", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.14.2", + "com.fasterxml.jackson.core:jackson-annotations:2.14.2", + "com.fasterxml.jackson.core:jackson-core:2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.14.2", + "com.fasterxml.jackson.core:jackson-databind:2.14.2", + "org.apache.tomcat.embed:tomcat-embed-websocket:10.1.7", + "org.apache.tomcat.embed:tomcat-embed-core:10.1.7", + "io.micrometer:micrometer-observation:1.10.5", + "jakarta.validation:jakarta.validation-api:3.0.2", + "org.jboss.logging:jboss-logging:3.5.0.Final", + "com.fasterxml:classmate:1.5.1", + "ch.qos.logback:logback-classic:1.4.6", + "org.apache.logging.log4j:log4j-to-slf4j:2.19.0", + "org.slf4j:jul-to-slf4j:2.0.7", + "org.springframework:spring-jcl:6.0.7", + "io.micrometer:micrometer-commons:1.10.5", + "ch.qos.logback:logback-core:1.4.6", + "org.slf4j:slf4j-api:2.0.7", + "org.apache.logging.log4j:log4j-api:2.19.0" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:3.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:3.0.5": { + "com.fasterxml:classmate": "1.5.1", + "org.hibernate.validator:hibernate-validator": "8.0.0.Final", + "jakarta.annotation:jakarta.annotation-api": "2.1.1", + "jakarta.validation:jakarta.validation-api": "3.0.2", + "org.jboss.logging:jboss-logging": "3.5.0.Final", + "ch.qos.logback:logback-classic": "1.4.6", + "ch.qos.logback:logback-core": "1.4.6", + "org.springframework.boot:spring-boot": "3.0.5", + "org.springframework.boot:spring-boot-autoconfigure": "3.0.5", + "org.springframework.boot:spring-boot-starter": "3.0.5", + "org.springframework.boot:spring-boot-starter-json": "3.0.5", + "org.springframework.boot:spring-boot-starter-logging": "3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat": "3.0.5", + "org.springframework.boot:spring-boot-starter-validation": "3.0.5", + "org.springframework.boot:spring-boot-starter-web": "3.0.5", + "org.slf4j:jul-to-slf4j": "2.0.7", + "org.slf4j:slf4j-api": "2.0.7", + "org.yaml:snakeyaml": "1.33", + "org.apache.tomcat.embed:tomcat-embed-core": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-el": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-websocket": "10.1.7", + "com.fasterxml.jackson.core:jackson-annotations": "2.14.2", + "com.fasterxml.jackson.core:jackson-core": "2.14.2", + "com.fasterxml.jackson.core:jackson-databind": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.14.2", + "org.apache.logging.log4j:log4j-api": "2.19.0", + "org.apache.logging.log4j:log4j-to-slf4j": "2.19.0", + "io.micrometer:micrometer-commons": "1.10.5", + "io.micrometer:micrometer-observation": "1.10.5", + "org.springframework:spring-aop": "6.0.7", + "org.springframework:spring-beans": "6.0.7", + "org.springframework:spring-context": "6.0.7", + "org.springframework:spring-core": "6.0.7", + "org.springframework:spring-expression": "6.0.7", + "org.springframework:spring-jcl": "6.0.7", + "org.springframework:spring-web": "6.0.7", + "org.springframework:spring-webmvc": "6.0.7" + } + } } \ No newline at end of file diff --git a/result/product.json b/result/product.json index cd0e04c..280bb3f 100644 --- a/result/product.json +++ b/result/product.json @@ -1,11 +1,15 @@ { "name": "product", "label": "Product", + "group": "com.demo", + "version": "0.0.1-SNAPSHOT", "description": "Product application", + "type": "microservice", "owner": "Team 3", "tags": { "java": "17", - "gradle": "7.6.1" + "gradle": "8.5", + "Overridden by dependencies": true }, "dependencies": [ "org.springframework.boot:spring-boot-starter-amqp:3.0.5", @@ -15,7 +19,139 @@ "org.springdoc:springdoc-openapi-ui:1.6.15", "org.modelmapper.extensions:modelmapper-spring:3.1.1" ], + "fullDependencies": [ + "org.springframework.boot:spring-boot-starter-amqp:3.0.5", + "org.springframework.boot:spring-boot-starter-data-mongodb:3.0.5", + "org.springframework.boot:spring-boot-starter-validation:3.0.5", + "org.springframework.boot:spring-boot-starter-web:3.0.5", + "org.springdoc:springdoc-openapi-ui:1.6.15", + "org.modelmapper.extensions:modelmapper-spring:3.1.1", + "org.springframework.boot:spring-boot-starter-json:3.0.5", + "org.springframework.boot:spring-boot-starter:3.0.5", + "org.springframework.amqp:spring-rabbit:3.0.3", + "org.springframework:spring-messaging:6.0.7", + "org.mongodb:mongodb-driver-sync:4.8.2", + "org.springframework.data:spring-data-mongodb:4.0.4", + "org.springframework.boot:spring-boot-starter-tomcat:3.0.5", + "org.apache.tomcat.embed:tomcat-embed-el:10.1.7", + "org.hibernate.validator:hibernate-validator:8.0.0.Final", + "org.springdoc:springdoc-openapi-webmvc-core:1.6.15", + "org.springframework:spring-webmvc:6.0.7", + "org.springdoc:springdoc-openapi-common:1.6.15", + "org.springframework:spring-web:6.0.7", + "org.webjars:swagger-ui:4.17.1", + "org.webjars:webjars-locator-core:0.52", + "io.github.classgraph:classgraph:4.8.149", + "org.modelmapper:modelmapper:3.1.1", + "org.springframework.boot:spring-boot-autoconfigure:3.0.5", + "org.springframework.boot:spring-boot:3.0.5", + "org.springframework.boot:spring-boot-starter-logging:3.0.5", + "jakarta.annotation:jakarta.annotation-api:2.1.1", + "org.springframework:spring-context:6.0.7", + "org.springframework:spring-tx:6.0.7", + "org.springframework.data:spring-data-commons:3.0.4", + "org.springframework:spring-aop:6.0.7", + "org.springframework:spring-beans:6.0.7", + "org.springframework.amqp:spring-amqp:3.0.3", + "org.springframework:spring-expression:6.0.7", + "org.springframework:spring-core:6.0.7", + "io.swagger.core.v3:swagger-core:2.2.8", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names:2.14.2", + "com.fasterxml.jackson.core:jackson-databind:2.14.2", + "com.fasterxml.jackson.core:jackson-core:2.14.2", + "io.swagger.core.v3:swagger-models:2.2.8", + "com.fasterxml.jackson.core:jackson-annotations:2.14.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.2", + "org.yaml:snakeyaml:1.33", + "com.rabbitmq:amqp-client:5.16.0", + "io.micrometer:micrometer-observation:1.10.5", + "org.mongodb:mongodb-driver-core:4.8.2", + "org.mongodb:bson-record-codec:4.8.2", + "org.mongodb:bson:4.8.2", + "ch.qos.logback:logback-classic:1.4.6", + "org.apache.logging.log4j:log4j-to-slf4j:2.19.0", + "org.slf4j:jul-to-slf4j:2.0.7", + "org.slf4j:slf4j-api:2.0.7", + "jakarta.validation:jakarta.validation-api:3.0.2", + "org.jboss.logging:jboss-logging:3.5.0.Final", + "com.fasterxml:classmate:1.5.1", + "org.apache.tomcat.embed:tomcat-embed-websocket:10.1.7", + "org.apache.tomcat.embed:tomcat-embed-core:10.1.7", + "org.springframework:spring-jcl:6.0.7", + "org.springframework.retry:spring-retry:2.0.1", + "io.micrometer:micrometer-commons:1.10.5", + "ch.qos.logback:logback-core:1.4.6", + "org.apache.logging.log4j:log4j-api:2.19.0", + "jakarta.xml.bind:jakarta.xml.bind-api:4.0.0", + "org.apache.commons:commons-lang3:3.12.0", + "io.swagger.core.v3:swagger-annotations:2.2.8", + "jakarta.activation:jakarta.activation-api:2.1.1" + ], "managementDependencies": [ "org.springframework.boot:spring-boot-dependencies:3.0.5" - ] + ], + "dependencyManagement": { + "org.springframework.boot:spring-boot-dependencies:3.0.5": { + "com.fasterxml:classmate": "1.5.1", + "org.apache.commons:commons-lang3": "3.12.0", + "org.hibernate.validator:hibernate-validator": "8.0.0.Final", + "jakarta.activation:jakarta.activation-api": "2.1.1", + "jakarta.annotation:jakarta.annotation-api": "2.1.1", + "jakarta.validation:jakarta.validation-api": "3.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api": "4.0.0", + "org.jboss.logging:jboss-logging": "3.5.0.Final", + "ch.qos.logback:logback-classic": "1.4.6", + "ch.qos.logback:logback-core": "1.4.6", + "org.mongodb:bson": "4.8.2", + "org.mongodb:bson-record-codec": "4.8.2", + "org.mongodb:mongodb-driver-core": "4.8.2", + "org.mongodb:mongodb-driver-sync": "4.8.2", + "com.rabbitmq:amqp-client": "5.16.0", + "org.springframework.boot:spring-boot": "3.0.5", + "org.springframework.boot:spring-boot-autoconfigure": "3.0.5", + "org.springframework.boot:spring-boot-starter": "3.0.5", + "org.springframework.boot:spring-boot-starter-amqp": "3.0.5", + "org.springframework.boot:spring-boot-starter-data-mongodb": "3.0.5", + "org.springframework.boot:spring-boot-starter-json": "3.0.5", + "org.springframework.boot:spring-boot-starter-logging": "3.0.5", + "org.springframework.boot:spring-boot-starter-tomcat": "3.0.5", + "org.springframework.boot:spring-boot-starter-validation": "3.0.5", + "org.springframework.boot:spring-boot-starter-web": "3.0.5", + "org.slf4j:jul-to-slf4j": "2.0.7", + "org.slf4j:slf4j-api": "2.0.7", + "org.yaml:snakeyaml": "1.33", + "org.springframework.amqp:spring-amqp": "3.0.3", + "org.springframework.amqp:spring-rabbit": "3.0.3", + "org.springframework.retry:spring-retry": "2.0.1", + "org.apache.tomcat.embed:tomcat-embed-core": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-el": "10.1.7", + "org.apache.tomcat.embed:tomcat-embed-websocket": "10.1.7", + "org.webjars:webjars-locator-core": "0.52", + "com.fasterxml.jackson.core:jackson-annotations": "2.14.2", + "com.fasterxml.jackson.core:jackson-core": "2.14.2", + "com.fasterxml.jackson.core:jackson-databind": "2.14.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jdk8": "2.14.2", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": "2.14.2", + "com.fasterxml.jackson.module:jackson-module-parameter-names": "2.14.2", + "org.apache.logging.log4j:log4j-api": "2.19.0", + "org.apache.logging.log4j:log4j-to-slf4j": "2.19.0", + "io.micrometer:micrometer-commons": "1.10.5", + "io.micrometer:micrometer-observation": "1.10.5", + "org.springframework.data:spring-data-commons": "3.0.4", + "org.springframework.data:spring-data-mongodb": "4.0.4", + "org.springframework:spring-aop": "6.0.7", + "org.springframework:spring-beans": "6.0.7", + "org.springframework:spring-context": "6.0.7", + "org.springframework:spring-core": "6.0.7", + "org.springframework:spring-expression": "6.0.7", + "org.springframework:spring-jcl": "6.0.7", + "org.springframework:spring-messaging": "6.0.7", + "org.springframework:spring-tx": "6.0.7", + "org.springframework:spring-web": "6.0.7", + "org.springframework:spring-webmvc": "6.0.7" + } + } } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index bb5c86c..622714c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,8 +6,10 @@ include 'microservice-visualization-webapp' // Microservice Visualization by Dependencies (Demo Project) include 'basket', 'customer', 'ordering', 'product' include 'basket-api' +include 'app-bom' project(':basket').projectDir = new File('demo/basket') project(':basket-api').projectDir = new File('demo/basket-api') project(':customer').projectDir = new File('demo/customer') project(':ordering').projectDir = new File('demo/ordering') -project(':product').projectDir = new File('demo/product') \ No newline at end of file +project(':product').projectDir = new File('demo/product') +project(':app-bom').projectDir = new File('demo/app-bom') \ No newline at end of file