blob: 837dd14f20b2bb48a82dbdd37dadbf93d694103a [file]
# Module-file fragment for Java/Maven external dependencies.
#
# This file is included from the root MODULE.bazel via include().
# It contains the rules_jvm_external configuration for Gerrit:
# - pinned root artifact versions to keep Gerrit and JGit aligned
# - excluded artifacts to prevent duplicate classes and unwanted runtimes
# - TOML-based dependency import + lockfile enforcement
#
# NOTE: MODULE/.MODULE.bazel files are evaluated in the bzlmod resolution phase
# and do not allow load() or function definitions. Keep this file self-contained.
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
# Although flexmark is published as many small modules, the `flexmark-all`
# artifact is a shaded aggregate that already includes all required classes.
# Exclude the modular artifacts to avoid duplicate classes in the WAR.
_FLEXMARK_GROUP = "com.vladsch.flexmark"
_FLEXMARK_MODULES = [
"flexmark",
"flexmark-ext-abbreviation",
"flexmark-ext-admonition",
"flexmark-ext-anchorlink",
"flexmark-ext-aside",
"flexmark-ext-attributes",
"flexmark-ext-autolink",
"flexmark-ext-definition",
"flexmark-ext-emoji",
"flexmark-ext-enumerated-reference",
"flexmark-ext-escaped-character",
"flexmark-ext-footnotes",
"flexmark-ext-gfm-issues",
"flexmark-ext-gfm-strikethrough",
"flexmark-ext-gfm-tasklist",
"flexmark-ext-gfm-users",
"flexmark-ext-gitlab",
"flexmark-ext-ins",
"flexmark-ext-jekyll-front-matter",
"flexmark-ext-jekyll-tag",
"flexmark-ext-macros",
"flexmark-ext-media-tags",
"flexmark-ext-resizable-image",
"flexmark-ext-superscript",
"flexmark-ext-tables",
"flexmark-ext-toc",
"flexmark-ext-typographic",
"flexmark-ext-wikilink",
"flexmark-ext-xwiki-macros",
"flexmark-ext-yaml-front-matter",
"flexmark-ext-youtube-embedded",
"flexmark-html2md-converter",
"flexmark-jira-converter",
"flexmark-pdf-converter",
"flexmark-profile-pegdown",
"flexmark-util",
"flexmark-util-ast",
"flexmark-util-builder",
"flexmark-util-collection",
"flexmark-util-data",
"flexmark-util-dependency",
"flexmark-util-format",
"flexmark-util-html",
"flexmark-util-misc",
"flexmark-util-options",
"flexmark-util-sequence",
"flexmark-util-visitor",
"flexmark-youtrack-converter",
]
_OTHER_EXCLUDES = [
# Logging clashes / legacy implementations.
"log4j:log4j",
"org.slf4j:slf4j-log4j12",
# openid4java transitively depends on commons-logging; not needed at runtime.
"commons-logging:commons-logging",
# commons-validator: exclude unused transitive commons-* stack.
"commons-beanutils:commons-beanutils",
"commons-collections:commons-collections",
"commons-digester:commons-digester",
# sshd-common/core bundled inside sshd-osgi in your runtime set.
"org.apache.sshd:sshd-common",
"org.apache.sshd:sshd-core",
# Unused Lucene modules (keep WAR footprint aligned with pre-migration).
"org.apache.lucene:lucene-facet",
"org.apache.lucene:lucene-queries",
"org.apache.lucene:lucene-sandbox",
# soy-template transitives not required at runtime.
"com.google.escapevelocity:escapevelocity",
"javax.annotation:jsr250-api",
"org.json:json",
# Redundant legacy XML APIs already provided by JDK; pulled via html/xml parsers.
"xml-apis:xml-apis",
]
EXCLUDED_ARTIFACTS = (
["%s:%s" % (_FLEXMARK_GROUP, a) for a in _FLEXMARK_MODULES] +
_OTHER_EXCLUDES
)
# We consume Guice's unshaded artifact (published as the "classes"
# classifier) plus an external OW2 ASM (see //lib/guice and tools/nongoogle.toml),
# because the ASM shaded into the default guice jar cannot read Java 25 class
# files and corrupts Guice's error-message source formatting. The external ASM
# must be >= 9.8, the first release with Java 25 (class major 69) support;
# Gerrit pins 9.9.1.
#
# That only holds if the plain (fat) com.google.inject:guice never reaches the
# classpath. These artifacts pull it in transitively, so strip that edge from
# each; they resolve Guice solely from the //lib/guice classes-classifier jar.
# Keep this list in sync with everything that depends on Guice transitively --
# a missed entry silently reintroduces the shaded ASM.
#
# TODO(davido): Drop these exclusions (and the classes classifier) once Guice
# ships a default jar with an updated shaded ASM that reads current class
# files: https://github.com/google/guice/issues/1926
_GUICE_FAT_JAR_CONSUMERS = [
"com.google.inject.extensions:guice-assistedinject",
"com.google.inject.extensions:guice-servlet",
"com.google.template:soy",
"org.openid4java:openid4java",
]
[
maven.amend_artifact(
name = "external_deps",
coordinates = coord,
exclusions = ["com.google.inject:guice"],
)
for coord in _GUICE_FAT_JAR_CONSUMERS
]
# Empty maven.install call to apply the configuration to the installation from
# toml files.
maven.install(
name = "external_deps",
artifacts = [],
# CRITICAL: Must remain "error".
# This guarantees fail-fast behavior if multiple versions of the same
# artifact are introduced by contributing modules. Downgrading this to
# "warn" would allow version skew to silently leak into release.war.
duplicate_version_warning = "error",
excluded_artifacts = EXCLUDED_ARTIFACTS,
fail_if_repin_required = True,
fail_on_missing_checksum = True,
fetch_sources = True,
known_contributing_modules = [
"jgit",
"gerrit",
],
lock_file = "//:external_deps.lock.json",
repositories = [
# Prefer Gerrit's mirror to reduce direct Maven Central traffic.
# Keep Maven Central as fallback while the mirror is populated.
"https://gerrit-maven.storage.googleapis.com",
"https://repo1.maven.org/maven2",
],
version_conflict_policy = "pinned",
)
maven.from_toml(
name = "external_deps",
libs_versions_toml = "//tools:deps.toml",
)
maven.from_toml(
name = "external_deps",
libs_versions_toml = "//tools:nongoogle.toml",
)
use_repo(maven, "external_deps")