Updating direct dependencies in Java is straightforward, but securing the hundreds of transitive libraries running beneath them is where many development pipelines stall. While automated tools simplify how teams upgrade direct dependencies—the packages your project explicitly declares—the Java ecosystem presents a challenge: pinned versions and deeply nested trees of transitive dependencies. Transitive dependencies are the libraries your direct dependencies rely on behind the scenes, which your package manager pulls in automatically.
When security vulnerabilities occur deep within library dependencies, such as the core Java framework zero-day flaw discovered by Lightwell, traditional updating tools often leave security teams and developers choosing between tedious manual overrides and silent exposure.
To address this, Lightwell provides security-focused enterprise rebuilds of open source Java libraries. Because enterprise build workflows and compliance policies vary, Lightwell allows engineering teams to choose how they ingest these trusted packages into their pipelines.
This article outlines the core problem behind Java transitive dependencies, how custom presets improve direct updates, and 3 flexible strategies for integrating Lightwell library rebuilds into enterprise pipelines directly.
The hidden challenge in Java software supply chains
In ecosystems like npm or PyPI, version ranges allow build tools to automatically pull nonbreaking library updates. In contrast, Java build tools like Maven and Gradle default to strictly pinned versions.
While tools like Renovate or Dependabot automate updates for direct dependencies, they cannot resolve transitive dependencies automatically. Custom Renovate presets, such as those available in our lightwell-experience/renovate-config GitHub repository, help automated tools recognize Lightwell rebuilds for direct dependencies.
However, transitive dependencies vastly outnumber direct dependencies in modern Java applications. Patching only direct dependencies leaves the majority of the application supply chain untouched.
3 integration strategies for Lightwell rebuilds
No 2 development teams handle updates the same way—a heavily audited banking service needs different guardrails than a fast-moving internal tool. Finding the right workflow means balancing developer autonomy with security overhead.
Option 1: Manual discovery and individual selection
In strictly regulated environments requiring explicit remediation for verified vulnerabilities, teams can query the Lightwell catalog or API endpoints using specific CVE identifiers or artifact names to manually select updated builds.
Reviewing dependencies individually gives you granular control over what enters production, but manually vetting hundreds of libraries across dozens of microservices does not scale.
Option 2: Targeted dependency analysis
This approach evaluates the complete dependency hierarchy against the Lightwell index and generates a detailed report that maps standard components directly to Lightwell rebuilds. Teams can review these findings against internal governance policies and apply fixes at their discretion.
You get a clear report of available fixes without touching your build files yet. The downside is execution: developers still have to copy recommended coordinates into their pom.xml by hand.
Practical example
Note
The script used in the following examples demonstrates the concept and serves as a starting point, but it is not a production-ready solution.
Consider the pin-transitives.mjs utility hosted in the lightwell-experience/renovate-config GitHub repository. The script analyzes the transitive dependency tree and queries Renovate to identify matching updates, generating this report:
$ node pin-transitives.mjs
Resolved 32 dependencies (1 direct)
Direct dependencies (1)
org.springframework:spring-core 5.3.18 → 5.3.18.rhlw-00001
Transitive dependencies (8)
com.jayway.jsonpath:json-path 2.8.0 → 2.8.0.rhlw-00001
<...snip>This output highlights each newly available rebuild release. Note that advanced filtering mechanisms and CVE tracking are not yet built into the utility script.
Option 3: Dependency pinning with generated bills of materials
Like targeted dependency analysis, this approach evaluates the entire dependency tree against the Lightwell catalog. It then generates a bill of materials (BOM) with dependencyManagement declarations that pin standard packages directly to Lightwell rebuilds hardened for security.
This approach delivers full auditability and precise version enforcement, while letting individual product teams fall back to upstream releases when needed. The trade-off is that it requires continuous execution in your build pipelines and adds ongoing maintenance during BOM updates.
Practical example
As with option 2, using the pin-transitives.mjs script with the --write flag produces a structured BOM file:
$ node pin-transitives.mjs --write
<snip>
$ cat lightwell-pins.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.lightwell</groupId>
<artifactId>rhlw-pins</artifactId>
<version>0.0.1</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.18.rhlw-00001</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.8.0.rhlw-00001</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>You can incorporate the generated lightwell-pins.xml file directly into your project either as a parent POM or by importing it within the dependencyManagement element of your main build configuration:
<...snip>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.lightwell</groupId>
<artifactId>rhlw-pins</artifactId>
<version>0.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<...snip>This configuration instructs Maven to use patched Lightwell binaries across listed libraries. Because Maven selects the first declaration it encounters, you can place targeted overrides above this import without modifying the underlying BOM file.
Strategy comparison matrix
| Strategy | Primary mechanism | Setup effort | Governance and control | Best used for |
|---|---|---|---|---|
| Manual discovery | Console UI or API search | High (manual) | Complete (individual selection) | Critical legacy systems with strict change controls |
| Dependency analysis | Reporting and analysis automation | Medium | Moderate (informational) | Teams evaluating security posture before upgrading |
| Scripted pinning | Generated BOM files | Medium (CI/CD pipeline) | High (auditable and overridable) | Enterprise applications needing strict audit trails |
Can this be done centrally?
Although configuring automated and centralized updates is technically feasible, we discourage this strategy and recommend evaluating alternative approaches. Opaque redirection mechanisms, such as proxy services that silently swap upstream content for Lightwell artifacts, introduce security risks by creating nonreproducible and unverifiable builds. While relocations (see the official Maven documentation) remain visible to build systems and appear accurately in generated software bill of materials (SBOM) artifacts, approach them with caution.
Next steps
For many teams maintaining active CI/CD pipelines, automated BOM generation offers a strong middle ground, combining precise version locking with predictable pull-request review cycles.
The provided reference script demonstrates this pattern and can serve as a starting point for production implementations. At the same time, the Lightwell team continues working with customers to refine implementation patterns and collaborating across platforms to simplify the overall developer experience.
To explore Renovate configurations in greater detail or experiment with sample pipeline integrations, visit our lightwell-experience/renovate-config GitHub repository or browse the Lightwell catalog to see which patched builds are available for your architecture.