SlideShare uma empresa Scribd logo
Escaping
Dependency Hell
A deep dive into Gradle's dependency
management features
NETFLIX
SECTION DIVIDER
Roberto Perez Alcolea
Senior Software Engineer @ Netflix
JVM Ecosystem
@rpalcolea
Who am I?
— Software Dependencies
— Why Dependency Management
is important?
— Dependency Management: The
Basics
— Dependency Management: Deep
Dive
— Q&A
Agenda
Software
Dependencies
A relationship between software components where
one component relies on the other to work properly.
Two types:
● Direct: explicitly defined and used by a software
component
● Transitive: A library or module indirectly used by a
software component.
Software Dependency
An automated technique for declaring, resolving, and
using functionality required by a project
What is dependency management?
Why is
Dependency
Management
important?
Developer’s frustration
But also…
⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠
⚠ ⚠
Free and Open Source
Software (FOSS) constitutes
70-90% of any given piece of
modern software solutions
⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠
⚠ ⚠
A Summary of Census II: Open Source Software Application Libraries the World Depends On
We have Maven Central!
Keeps growing…
Images from https://www.sonatype.com/state-of-the-software-supply-chain/introduction
Images from https://www.sonatype.com/state-of-the-software-supply-chain/introduction
However, there are risks
Remember log4shell?
And…
Projects evolve fast so
our dependencies
The reality is…
Most of times, these
problems come from
transitive dependencies
At Netflix, we are
not immune to this
NETFLIX
TEXT
Netflix Ecosystem
— 3.5k JVM based repositories
(really an eventually consistent
distributed monolith)
— Binary Integration (JARs)
— Thousands of Builds per day
— Mix of internal and external
libraries/frameworks
— Thousands of artifacts generated
per day that could be deployed at
any time
Thankfully, Gradle Dependency
Management Machinery is very
powerful for these scenarios
🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨
🚨🚨🚨
The following can be
applied to any jvm based
project
🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨
Dependency
Management
(the basics)
Built-in support for declaring
dependencies
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/1-dependency-management-basics
View and Debug Dependencies
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/1-dependency-management-basics
Powerful Build Scans
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/1-dependency-management-basics
Configurations
Images from https://docs.gradle.org/current/userguide/java_plugin.html
Dependency Resolution
Two phases until the graph is complete
● When a new dependency is added to the
graph, perform conflict resolution to
determine which version should be added to
the graph.
● When a specific dependency, that is a
module with a version, is identified as part of
the graph, retrieve its metadata so that its
dependencies can be added in turn
(transitives).
Conflicts will happen!
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/1-dependency-management-basics
Images from https://jacomet.dev/jfokus23_dependency_management/
Version conflict
● Multiple paths to dependency
○ Disagree on version
● Optimistic upgrade strategy
○ Highest version that satisfies all
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/1-dependency-management-basics
Images from https://jacomet.dev/jfokus23_dependency_management/
Declaring repositories
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/2-configuring-repositories
The order of declaration determines how Gradle will check for dependencies at
runtime. If Gradle finds a module descriptor in a particular repository, it will attempt
to download all of the artifacts for that module from the same repository.
Dependency Cache
Located in $GRADLE_USER_HOME/caches
● A file-based store of downloaded artifacts, including binaries like jars as
well as raw downloaded metadata like POM files and Ivy files.
● A binary store of resolved module metadata, including the results of
resolving dynamic versions, module descriptors, and artifacts.
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/2-configuring-repositories
Dependency Cache
For builds on ephemeral environments (ex. containers) you could:
● Copying the dependency cache into each container
● Sharing a read-only dependency cache between multiple containers
Dependency
Management
(Deep Dive)
Downgrading dependencies
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/3-downgrading-dependencies
Useful for cases where we require an older version and transitives break us
Avoid use of exclude!
● Excluding a transitive dependency might lead to runtime errors if
external libraries do not properly function without them
● If excludes are applied globally, there is a huge performance
impact
● No visibility in dependency insight or build scans
Upgrading transitive dependencies
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/4-defining-constraints
The version definition for org.apache.logging.log4j:log4j-core:2.21.0 is only taken into account if log4j-core is
brought in as transitive dependency, since log4j-core is not defined as dependency in the project
Cross module version conflict
There are libraries that are expected to work together
within a single version. Examples:
● com.fasterxml.jackson-*
● org.springframework:spring-*
● org.springframework.boot:spring-boot-*
● and many others
You want alignment of these dependencies!
Option 1: Use BOMs if available!
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/5-use-boms
If you have a family of libraries, consider creating your own!
Option 2: Create a virtual platform!
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/6-virtual-platform-alignment
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/7-module-replacements
Useful for dependency graphs that accidentally contain multiple
implementations of the same APIs!
Dealing with implementation conflicts
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/8-reject-dependency-versions
Sometimes we just don’t want to see certain dependencies in our graph
Rejecting versions
We have seen plenty of code so far in
one project and we can re-use it! 😊
with…
Gradle Plugins!
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/9-sample-gradle-plugin
Existing OSS Plugins
There are a few at your disposal!
● Nebula (Netflix)
○ Gradle Jakarta EE Migration Plugin
○ Nebula Resolution Rules
● Logging capabilities gradle plugin
🔒🔒🔒🔒🔒🔒🔒
🔒
Don’t forget to lock your
dependencies if you use
dynamic versions!
🔒🔒🔒🔒🔒🔒🔒
Dependency Locking
Example in https://github.com/rpalcolea/escaping-dependency-hell-talk-demos-2023/tree/main/10-dependency-lock
And there
is more 😊!
But we might never end
Other things to explore:
● Fail on version conflict
● Consistency resolution across classpaths
● Sharing versions across projects (catalogs)
● Feature Variants
● Dependency Verification
Last thoughts…
— Software evolves fast and we
integrate binaries constantly
— Dependency Hell is real, we just
want to reduce the pain
sometimes
— Yes, Dependency Management is
hard! And can be frustrating but
Gradle has a rich feature set to
overcome Dependency
Management Challenges and
provide great insight into your
project’s dependency graphs
Questions?
Roberto Perez Alcolea
rperezalcolea@netflix.com
Thank
you!

Mais conteúdo relacionado

Mais procurados

Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
Docker, Inc.
 

Mais procurados (20)

What is SSL/TLS, 1-way and 2-way SSL?
What is SSL/TLS, 1-way and 2-way SSL?What is SSL/TLS, 1-way and 2-way SSL?
What is SSL/TLS, 1-way and 2-way SSL?
 
The Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and ContainersThe Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and Containers
 
On prem to cloud hub migration (updated)
On prem to cloud hub migration (updated)On prem to cloud hub migration (updated)
On prem to cloud hub migration (updated)
 
MuleSoft Architecture Presentation
MuleSoft Architecture PresentationMuleSoft Architecture Presentation
MuleSoft Architecture Presentation
 
Understanding Monorepos
Understanding MonoreposUnderstanding Monorepos
Understanding Monorepos
 
Rtf v2 ingress muleSoft meetup self managed kubernetes
Rtf v2 ingress muleSoft meetup self managed kubernetesRtf v2 ingress muleSoft meetup self managed kubernetes
Rtf v2 ingress muleSoft meetup self managed kubernetes
 
How Snowflake Sink Connector Uses Snowpipe’s Streaming Ingestion Feature, Jay...
How Snowflake Sink Connector Uses Snowpipe’s Streaming Ingestion Feature, Jay...How Snowflake Sink Connector Uses Snowpipe’s Streaming Ingestion Feature, Jay...
How Snowflake Sink Connector Uses Snowpipe’s Streaming Ingestion Feature, Jay...
 
Runtime Fabric on OpenShift _--_ MuleSoft Meetup Deck.pptx
Runtime Fabric on OpenShift _--_ MuleSoft Meetup Deck.pptxRuntime Fabric on OpenShift _--_ MuleSoft Meetup Deck.pptx
Runtime Fabric on OpenShift _--_ MuleSoft Meetup Deck.pptx
 
Benefits of integration with the Mulesoft Anypoint Platform
Benefits of integration with the Mulesoft Anypoint PlatformBenefits of integration with the Mulesoft Anypoint Platform
Benefits of integration with the Mulesoft Anypoint Platform
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
Introduction to Apache Maven
Introduction to Apache MavenIntroduction to Apache Maven
Introduction to Apache Maven
 
Learn More About Object Store | MuleSoft Mysore Meetup #9
Learn More About Object Store | MuleSoft Mysore Meetup #9Learn More About Object Store | MuleSoft Mysore Meetup #9
Learn More About Object Store | MuleSoft Mysore Meetup #9
 
Kafka with IBM Event Streams - Technical Presentation
Kafka with IBM Event Streams - Technical PresentationKafka with IBM Event Streams - Technical Presentation
Kafka with IBM Event Streams - Technical Presentation
 
[WSO2 API Manager Community Call] Mastering JWTs with WSO2 API Manager
[WSO2 API Manager Community Call] Mastering JWTs with WSO2 API Manager[WSO2 API Manager Community Call] Mastering JWTs with WSO2 API Manager
[WSO2 API Manager Community Call] Mastering JWTs with WSO2 API Manager
 
Keycloak Single Sign-On
Keycloak Single Sign-OnKeycloak Single Sign-On
Keycloak Single Sign-On
 
HashiCorp Vault configuration as code via HashiCorp Terraform- stories from t...
HashiCorp Vault configuration as code via HashiCorp Terraform- stories from t...HashiCorp Vault configuration as code via HashiCorp Terraform- stories from t...
HashiCorp Vault configuration as code via HashiCorp Terraform- stories from t...
 
Mulesoft corporate template final
Mulesoft corporate template  final Mulesoft corporate template  final
Mulesoft corporate template final
 
GDG Cloud Southlake #8 Steve Cravens: Infrastructure as-Code (IaC) in 2022: ...
GDG Cloud Southlake #8  Steve Cravens: Infrastructure as-Code (IaC) in 2022: ...GDG Cloud Southlake #8  Steve Cravens: Infrastructure as-Code (IaC) in 2022: ...
GDG Cloud Southlake #8 Steve Cravens: Infrastructure as-Code (IaC) in 2022: ...
 
Debugging ansible modules
Debugging ansible modulesDebugging ansible modules
Debugging ansible modules
 
Camel Day Italia 2021 - Camel K
Camel Day Italia 2021 - Camel KCamel Day Italia 2021 - Camel K
Camel Day Italia 2021 - Camel K
 

Semelhante a Escaping Dependency Hell: A deep dive into Gradle's dependency management features | Charlotte JUG October 2023

Semelhante a Escaping Dependency Hell: A deep dive into Gradle's dependency management features | Charlotte JUG October 2023 (20)

Create a PHP Library the right way
Create a PHP Library the right wayCreate a PHP Library the right way
Create a PHP Library the right way
 
Third-Party Software Library Reuse : From Adoption to Migration
Third-Party Software Library Reuse : From Adoption to MigrationThird-Party Software Library Reuse : From Adoption to Migration
Third-Party Software Library Reuse : From Adoption to Migration
 
Digital Fabrication Studio v.0.2: Information
Digital Fabrication Studio v.0.2: InformationDigital Fabrication Studio v.0.2: Information
Digital Fabrication Studio v.0.2: Information
 
Tribal Nova Docker feedback
Tribal Nova Docker feedbackTribal Nova Docker feedback
Tribal Nova Docker feedback
 
Digital Fabrication Studio.02 _Information @ Aalto Media Factory
Digital Fabrication Studio.02 _Information @ Aalto Media FactoryDigital Fabrication Studio.02 _Information @ Aalto Media Factory
Digital Fabrication Studio.02 _Information @ Aalto Media Factory
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Maven in mulesoft
Maven in mulesoftMaven in mulesoft
Maven in mulesoft
 
Keep calm and write reusable code in Android
Keep calm and write reusable code in AndroidKeep calm and write reusable code in Android
Keep calm and write reusable code in Android
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready Solutions12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready Solutions
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
 
Aleksandr Kutsan "Managing Dependencies in C++"
Aleksandr Kutsan "Managing Dependencies in C++"Aleksandr Kutsan "Managing Dependencies in C++"
Aleksandr Kutsan "Managing Dependencies in C++"
 
Software Development with PHP & Laravel
Software Development  with PHP & LaravelSoftware Development  with PHP & Laravel
Software Development with PHP & Laravel
 
Loaders complete
Loaders completeLoaders complete
Loaders complete
 
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP EcosystemWhat is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
 
Architecting the Future: Abstractions and Metadata - CodeStock
Architecting the Future: Abstractions and Metadata - CodeStockArchitecting the Future: Abstractions and Metadata - CodeStock
Architecting the Future: Abstractions and Metadata - CodeStock
 
Developing MDA Applications with the PhpManteiga Framework
Developing MDA Applications with the PhpManteiga FrameworkDeveloping MDA Applications with the PhpManteiga Framework
Developing MDA Applications with the PhpManteiga Framework
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий Богомолов
 
Django vs Flask_ Which Python Framework to Choose and When to Use _ Phenomena...
Django vs Flask_ Which Python Framework to Choose and When to Use _ Phenomena...Django vs Flask_ Which Python Framework to Choose and When to Use _ Phenomena...
Django vs Flask_ Which Python Framework to Choose and When to Use _ Phenomena...
 
Top 6 php framework
Top 6 php frameworkTop 6 php framework
Top 6 php framework
 

Mais de Roberto Pérez Alcolea

Dependency Management in a Complex World (JConf Chicago 2022)
Dependency Management in a Complex World (JConf Chicago 2022)Dependency Management in a Complex World (JConf Chicago 2022)
Dependency Management in a Complex World (JConf Chicago 2022)
Roberto Pérez Alcolea
 
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
Roberto Pérez Alcolea
 
Dependency Management at Scale @ JConf Centroamérica 2020
Dependency Management at Scale @ JConf Centroamérica 2020Dependency Management at Scale @ JConf Centroamérica 2020
Dependency Management at Scale @ JConf Centroamérica 2020
Roberto Pérez Alcolea
 
Dependency Management at Scale
Dependency Management at ScaleDependency Management at Scale
Dependency Management at Scale
Roberto Pérez Alcolea
 

Mais de Roberto Pérez Alcolea (10)

[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
 
DPE Summit - A More Integrated Build and CI to Accelerate Builds at Netflix
DPE Summit - A More Integrated Build and CI to Accelerate Builds at NetflixDPE Summit - A More Integrated Build and CI to Accelerate Builds at Netflix
DPE Summit - A More Integrated Build and CI to Accelerate Builds at Netflix
 
Dependency Management in a Complex World (JConf Chicago 2022)
Dependency Management in a Complex World (JConf Chicago 2022)Dependency Management in a Complex World (JConf Chicago 2022)
Dependency Management in a Complex World (JConf Chicago 2022)
 
Leveraging Gradle @ Netflix (Guadalajara JUG Feb 25, 2021)
Leveraging Gradle @ Netflix (Guadalajara JUG Feb 25, 2021)Leveraging Gradle @ Netflix (Guadalajara JUG Feb 25, 2021)
Leveraging Gradle @ Netflix (Guadalajara JUG Feb 25, 2021)
 
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
Leveraging Gradle @ Netflix (Madrid GUG Feb 2, 2021)
 
Dependency Management at Scale @ JConf Centroamérica 2020
Dependency Management at Scale @ JConf Centroamérica 2020Dependency Management at Scale @ JConf Centroamérica 2020
Dependency Management at Scale @ JConf Centroamérica 2020
 
Dependency Management at Scale
Dependency Management at ScaleDependency Management at Scale
Dependency Management at Scale
 
GR8ConfUS 2018 - High Scalable Streaming Microservices with Kafka Streams
GR8ConfUS 2018 - High Scalable Streaming Microservices with Kafka StreamsGR8ConfUS 2018 - High Scalable Streaming Microservices with Kafka Streams
GR8ConfUS 2018 - High Scalable Streaming Microservices with Kafka Streams
 
GR8ConfUS 2018 - High performant in-memory datasets with Netflix H0110W
GR8ConfUS 2018 - High performant in-memory datasets with Netflix H0110WGR8ConfUS 2018 - High performant in-memory datasets with Netflix H0110W
GR8ConfUS 2018 - High performant in-memory datasets with Netflix H0110W
 
GR8ConfUS 2017 - Real Time Traffic Visualization with Vizceral and Hystrix
GR8ConfUS 2017 - Real Time Traffic Visualization with Vizceral and HystrixGR8ConfUS 2017 - Real Time Traffic Visualization with Vizceral and Hystrix
GR8ConfUS 2017 - Real Time Traffic Visualization with Vizceral and Hystrix
 

Último

JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
Max Lee
 

Último (20)

Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Benefits of Employee Monitoring Software
Benefits of  Employee Monitoring SoftwareBenefits of  Employee Monitoring Software
Benefits of Employee Monitoring Software
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
 
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
KLARNA -  Language Models and Knowledge Graphs: A Systems ApproachKLARNA -  Language Models and Knowledge Graphs: A Systems Approach
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
A Guideline to Gorgias to to Re:amaze Data Migration
A Guideline to Gorgias to to Re:amaze Data MigrationA Guideline to Gorgias to to Re:amaze Data Migration
A Guideline to Gorgias to to Re:amaze Data Migration
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
 
CompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdfCompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdf
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
INGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by DesignINGKA DIGITAL: Linked Metadata by Design
INGKA DIGITAL: Linked Metadata by Design
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024
 

Escaping Dependency Hell: A deep dive into Gradle's dependency management features | Charlotte JUG October 2023