use super::{FrameworkDetectionUtils, LanguageFrameworkDetector, TechnologyRule};
use crate::analyzer::{DetectedLanguage, DetectedTechnology, LibraryType, TechnologyCategory};
use crate::error::Result;
pub struct JavaFrameworkDetector;
impl LanguageFrameworkDetector for JavaFrameworkDetector {
fn detect_frameworks(&self, language: &DetectedLanguage) -> Result<Vec<DetectedTechnology>> {
let rules = get_jvm_technology_rules();
let all_deps: Vec<String> = language
.main_dependencies
.iter()
.chain(language.dev_dependencies.iter())
.cloned()
.collect();
let technologies = FrameworkDetectionUtils::detect_technologies_by_dependencies(
&rules,
&all_deps,
language.confidence,
);
Ok(technologies)
}
fn supported_languages(&self) -> Vec<&'static str> {
vec!["Java", "Kotlin", "Java/Kotlin"]
}
}
fn get_jvm_technology_rules() -> Vec<TechnologyRule> {
vec![
TechnologyRule {
name: "Spring Boot".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec![
"spring-boot".to_string(),
"org.springframework.boot".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["spring".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Framework".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec![
"spring-context".to_string(),
"org.springframework".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["spring".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Data".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec![
"spring-data".to_string(),
"org.springframework.data".to_string(),
"spring-data-jpa".to_string(),
"spring-data-mongodb".to_string(),
"spring-data-redis".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Security".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"spring-security".to_string(),
"org.springframework.security".to_string(),
"spring-security-core".to_string(),
"spring-security-oauth2".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Cloud".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"spring-cloud".to_string(),
"org.springframework.cloud".to_string(),
],
requires: vec!["Spring Boot".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Cloud Gateway".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec![
"spring-cloud-gateway".to_string(),
"spring-cloud-starter-gateway".to_string(),
],
requires: vec!["Spring Cloud".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Cloud Config".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec![
"spring-cloud-config".to_string(),
"spring-cloud-starter-config".to_string(),
],
requires: vec!["Spring Cloud".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Cloud Netflix".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec![
"spring-cloud-netflix".to_string(),
"spring-cloud-starter-netflix-eureka".to_string(),
"spring-cloud-starter-netflix-hystrix".to_string(),
],
requires: vec!["Spring Cloud".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring WebFlux".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec![
"spring-webflux".to_string(),
"org.springframework.webflux".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring MVC".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["spring-webmvc".to_string(), "spring-web".to_string()],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Batch".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"spring-batch".to_string(),
"org.springframework.batch".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spring Integration".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"spring-integration".to_string(),
"org.springframework.integration".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Spring AOP".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec![
"spring-aop".to_string(),
"org.springframework.aop".to_string(),
],
requires: vec!["Spring Framework".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Quarkus".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["quarkus".to_string(), "io.quarkus".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Micronaut".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["micronaut".to_string(), "io.micronaut".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Helidon".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["helidon".to_string(), "io.helidon".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Vert.x".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["vertx".to_string(), "io.vertx".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
file_indicators: vec![],
alternative_names: vec!["eclipse vert.x".to_string(), "vertx".to_string()],
},
TechnologyRule {
name: "Struts".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["struts".to_string(), "org.apache.struts".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["apache struts".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "JSF".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.85,
dependency_patterns: vec![
"jsf".to_string(),
"javax.faces".to_string(),
"jakarta.faces".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["javaserver faces".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Dropwizard".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["dropwizard".to_string(), "io.dropwizard".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Spark Java".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["spark-core".to_string(), "com.sparkjava".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["spark".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Javalin".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["javalin".to_string(), "io.javalin".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Ratpack".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["ratpack".to_string(), "io.ratpack".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Ninja Framework".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["ninja".to_string(), "org.ninjaframework".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["ninja".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Blade".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["blade".to_string(), "com.bladejava".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Play Framework".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["play".to_string(), "com.typesafe.play".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["play".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Hibernate".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec![
"hibernate".to_string(),
"org.hibernate".to_string(),
"hibernate-core".to_string(),
"hibernate-entitymanager".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["hibernate orm".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "MyBatis".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["mybatis".to_string(), "org.mybatis".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "JOOQ".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["jooq".to_string(), "org.jooq".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "JPA".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec![
"javax.persistence".to_string(),
"jakarta.persistence".to_string(),
"jpa".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["java persistence api".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "EclipseLink".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec![
"eclipselink".to_string(),
"org.eclipse.persistence".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache OpenJPA".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["openjpa".to_string(), "org.apache.openjpa".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["openjpa".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "QueryDSL".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["querydsl".to_string(), "com.querydsl".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "JDBI".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["jdbi".to_string(), "org.jdbi".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "MySQL Connector".to_string(),
category: TechnologyCategory::Database,
confidence: 0.95,
dependency_patterns: vec!["mysql-connector-java".to_string(), "com.mysql".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["mysql".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "PostgreSQL Driver".to_string(),
category: TechnologyCategory::Database,
confidence: 0.95,
dependency_patterns: vec!["postgresql".to_string(), "org.postgresql".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["postgres".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "MongoDB Driver".to_string(),
category: TechnologyCategory::Database,
confidence: 0.95,
dependency_patterns: vec![
"mongodb-driver".to_string(),
"org.mongodb".to_string(),
"mongo-java-driver".to_string(),
"spring-boot-starter-data-mongodb".to_string(),
"spring-data-mongodb".to_string(),
"spring-boot-starter-data-mongodb-reactive".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["mongodb".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Redis Jedis".to_string(),
category: TechnologyCategory::Database,
confidence: 0.95,
dependency_patterns: vec![
"jedis".to_string(),
"redis.clients".to_string(),
"spring-boot-starter-data-redis".to_string(),
"spring-data-redis".to_string(),
"lettuce-core".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["redis".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "H2 Database".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["com.h2database".to_string(), "h2database".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Derby".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["derby".to_string(), "org.apache.derby".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["derby".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "SQLite JDBC".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["sqlite-jdbc".to_string(), "org.xerial".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["sqlite".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Oracle JDBC".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["ojdbc".to_string(), "com.oracle.database.jdbc".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["oracle".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "SQL Server JDBC".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec![
"mssql-jdbc".to_string(),
"com.microsoft.sqlserver".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["sqlserver".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Jakarta EE".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["jakarta.".to_string(), "jakarta-ee".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["java ee".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Maven".to_string(),
category: TechnologyCategory::BuildTool,
confidence: 0.80,
dependency_patterns: vec!["maven".to_string(), "org.apache.maven".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["apache maven".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Gradle".to_string(),
category: TechnologyCategory::BuildTool,
confidence: 0.80,
dependency_patterns: vec!["gradle".to_string(), "org.gradle".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "JUnit".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["junit".to_string(), "org.junit".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "TestNG".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["testng".to_string(), "org.testng".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Mockito".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.80,
dependency_patterns: vec!["mockito".to_string(), "org.mockito".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Reactor".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["reactor".to_string(), "io.projectreactor".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["project reactor".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "RxJava".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["rxjava".to_string(), "io.reactivex".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "RSocket".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"rsocket".to_string(),
"io.rsocket".to_string(),
"rsocket-core".to_string(),
"rsocket-transport-netty".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Ktor".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["ktor".to_string(), "io.ktor".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Kafka".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec![
"kafka".to_string(),
"org.apache.kafka".to_string(),
"kafka-clients".to_string(),
"spring-kafka".to_string(),
"reactor-kafka".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["kafka".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "RabbitMQ".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec!["amqp-client".to_string(), "com.rabbitmq".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["rabbitmq".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache ActiveMQ".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["activemq".to_string(), "org.apache.activemq".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["activemq".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Pulsar".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["pulsar-client".to_string(), "org.apache.pulsar".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["pulsar".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Elasticsearch".to_string(),
category: TechnologyCategory::Database,
confidence: 0.95,
dependency_patterns: vec!["elasticsearch".to_string(), "org.elasticsearch".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["elastic".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Solr".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["solr".to_string(), "org.apache.solr".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["solr".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Lucene".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["lucene".to_string(), "org.apache.lucene".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["lucene".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Hazelcast".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["hazelcast".to_string(), "com.hazelcast".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Ignite".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["ignite".to_string(), "org.apache.ignite".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["ignite".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "EhCache".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec!["ehcache".to_string(), "org.ehcache".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Caffeine".to_string(),
category: TechnologyCategory::Database,
confidence: 0.85,
dependency_patterns: vec![
"caffeine".to_string(),
"com.github.ben-manes.caffeine".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Shiro".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["shiro".to_string(), "org.apache.shiro".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["shiro".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Bouncy Castle".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["bcprov".to_string(), "org.bouncycastle".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Keycloak".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["keycloak".to_string(), "org.keycloak".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Jasypt".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["jasypt".to_string(), "org.jasypt".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Tomcat".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.85,
dependency_patterns: vec!["tomcat".to_string(), "org.apache.tomcat".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["tomcat".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Jetty".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.85,
dependency_patterns: vec!["jetty".to_string(), "org.eclipse.jetty".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["eclipse jetty".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Undertow".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.85,
dependency_patterns: vec!["undertow".to_string(), "io.undertow".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Netty".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.85,
dependency_patterns: vec!["netty".to_string(), "io.netty".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache HttpClient".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec![
"httpclient".to_string(),
"org.apache.httpcomponents".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["httpclient".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "OkHttp".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["okhttp".to_string(), "com.squareup.okhttp3".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Retrofit".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["retrofit".to_string(), "com.squareup.retrofit2".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Jackson".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["jackson".to_string(), "com.fasterxml.jackson".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Gson".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["gson".to_string(), "com.google.gson".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache JAXB".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.80,
dependency_patterns: vec![
"jaxb".to_string(),
"javax.xml.bind".to_string(),
"jakarta.xml.bind".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["jaxb".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Logback".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["logback".to_string(), "ch.qos.logback".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Log4j".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["log4j".to_string(), "org.apache.logging.log4j".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["apache log4j".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "SLF4J".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.80,
dependency_patterns: vec!["slf4j".to_string(), "org.slf4j".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Micrometer".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["micrometer".to_string(), "io.micrometer".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Prometheus".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["prometheus".to_string(), "io.prometheus".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Actuator".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec![
"spring-boot-starter-actuator".to_string(),
"actuator".to_string(),
],
requires: vec!["Spring Boot".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Bean Validation".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec![
"validation-api".to_string(),
"javax.validation".to_string(),
"jakarta.validation".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["jsr303".to_string(), "jsr380".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Hibernate Validator".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec![
"hibernate-validator".to_string(),
"org.hibernate.validator".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Selenium".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.90,
dependency_patterns: vec![
"selenium".to_string(),
"org.seleniumhq.selenium".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Cucumber".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["cucumber".to_string(), "io.cucumber".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "WireMock".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["wiremock".to_string(), "com.github.tomakehurst".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "REST Assured".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["rest-assured".to_string(), "io.rest-assured".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Testcontainers".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.90,
dependency_patterns: vec![
"testcontainers".to_string(),
"org.testcontainers".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
file_indicators: vec![],
alternative_names: vec![],
},
TechnologyRule {
name: "Apache Spark".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["spark".to_string(), "org.apache.spark".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["spark".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Flink".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["flink".to_string(), "org.apache.flink".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["flink".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Storm".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["storm".to_string(), "org.apache.storm".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["storm".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Lombok".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["lombok".to_string(), "org.projectlombok".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "MapStruct".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["mapstruct".to_string(), "org.mapstruct".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Google Guava".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.80,
dependency_patterns: vec!["guava".to_string(), "com.google.guava".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["guava".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Apache Commons".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.75,
dependency_patterns: vec!["commons-".to_string(), "org.apache.commons".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["commons".to_string()],
file_indicators: vec![],
},
]
}