| # 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") |