| # 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: |
| # - forced 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 |
| ) |
| |
| # Root-level dependency versions declared by Gerrit must take precedence over |
| # versions contributed by layered modules (e.g. JGit) when resolving the shared |
| # maven.install("external_deps") repository. |
| # |
| # rules_jvm_external currently lacks a mechanism for the root module to globally |
| # enforce its declared versions across the layered Maven graph when using |
| # bzlmod. In particular, version_conflict_policy = "pinned" still fails early |
| # with duplicate artifacts when multiple modules contribute different versions. |
| # |
| # As a workaround, we explicitly force the root-selected versions here via |
| # maven.amend_artifact(force_version = "true") for GA coordinates that may also |
| # be introduced transitively by JGit. |
| # |
| # Versions themselves are sourced from deps.toml and the pinned lockfile. |
| # |
| # TODO(davido): Remove this workaround once global root version enforcement is |
| # supported in rules_jvm_external: |
| # https://github.com/bazel-contrib/rules_jvm_external/issues/1549 |
| _GERRIT_FORCED_ARTIFACTS = [ |
| "args4j:args4j", |
| "com.googlecode.javaewah:JavaEWAH", |
| "commons-codec:commons-codec", |
| "org.apache.commons:commons-lang3", |
| "org.eclipse.jetty:jetty-http", |
| "org.eclipse.jetty:jetty-io", |
| "org.eclipse.jetty:jetty-security", |
| "org.eclipse.jetty:jetty-server", |
| "org.eclipse.jetty:jetty-util", |
| "org.eclipse.jetty:jetty-util-ajax", |
| ] |
| |
| [ |
| maven.amend_artifact( |
| name = "external_deps", |
| coordinates = coord, |
| force_version = "true", |
| ) |
| for coord in _GERRIT_FORCED_ARTIFACTS |
| ] |
| |
| # 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 = [ |
| "https://repo1.maven.org/maven2", |
| "https://gerrit-maven.storage.googleapis.com", |
| ], |
| 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") |