Maven artifact resolver for Bazel JVM projects
See example for a complete workspace.
Running bazel run @managed_third_party//:resolve -- --resolve-locally
generates pin
under third_party
directory. Default location can be changed with --destination
command line option.
DESTINATION_DIRECTORY
environment variable can be used to generate pin outside the current workspace.
Pin files can be loaded with:
load("//:third_party.bzl", "managed_third_party_dependencies")
managed_third_party_dependencies()
@managed_third_party
repository is configured with:
managed_third_party(
artifacts = MANAGED_DEPS + TOOL_DEPS,
import_external_macro_name = "import_external",
import_external_rule_path = "@rules_maven_third_party//:import_external.bzl",
repository_urls = REPOSITORY_URLS,
)
artifacts
is a list of high level artifact definitions. Example of such list:
load("@rules_maven_third_party//rules:maven_specs.bzl", "wix")
MANAGED_DEPS = [
wix.artifact(group = "junit", artifact = "junit", version = "4.13.2"),
]
import_external_macro_name
and import_external_rule_path
configure to load statement in generated pin file:
load("@rules_maven_third_party//:import_external.bzl", import_external = "import_external")
def dependencies():
import_external(
name = "junit_junit",
artifact = "junit:junit:4.13.2",
artifact_sha256 = "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3",
srcjar_sha256 = "34181df6482d40ea4c046b063cb53c7ffae94bdf1b1d62695bdf3adf9dea7e3a",
deps = [
"@org_hamcrest_hamcrest_core",
],
)
repository_urls
allows to specify list of maven repositories to look for artifacts
group
: The Maven artifact coordinate group name (ex: "com.google.guava").artifact
: The Maven artifact coordinate artifact name (ex: "guava").version
: The Maven artifact coordinate version name (ex: "1.20.1").ownership_tag
: 3rd party dependency owner responsible for its maintenance. not implementedpackaging
: The Maven artifact coordinate packaging name (ex: "jar").classifier
: The Maven artifact coordinate classifier name (ex: "jdk11").exclusions
: Artifact dependencies to be excluded from resolution closure.neverlink
: neverlink value to set,testonly
: testonly value to set. not implementedtags
: Target tags.flatten_transitive_deps
: Define all transitive deps as direct deps.aliases
: aliases that will point to this dep.
- testonly does not work
- sometimes after removing high level dep, third_party.bzl entry is not removed resulting in load failure
- minimize tool dependencies
- add full coursier support
- possibly rewrite the tool in Java to remove need for complex Rules Scala setup and dependencies
Maintainer: Vaidas Pilkauskas (@liucijus)
Original code written internally by multiple folks at Wix.com.