From 49f6999ea77173dd2717c31ab019ffdba5172551 Mon Sep 17 00:00:00 2001 From: Simon Mavi Stewart Date: Fri, 26 Aug 2022 14:55:20 +0200 Subject: [PATCH] Generate a Maven BOM --- Rakefile | 2 + WORKSPACE | 11 +-- java/BUILD.bazel | 2 +- java/defs.bzl | 3 +- java/private/export.bzl | 16 ++++ java/private/module.bzl | 2 +- java/src/org/openqa/selenium/grid/BUILD.bazel | 41 +++++++++- .../openqa/selenium/grid/bom-pom-template.xml | 80 +++++++++++++++++++ 8 files changed, 145 insertions(+), 12 deletions(-) create mode 100755 java/src/org/openqa/selenium/grid/bom-pom-template.xml diff --git a/Rakefile b/Rakefile index c526e61db4ceb..0ed7cc92aac28 100644 --- a/Rakefile +++ b/Rakefile @@ -106,6 +106,8 @@ JAVA_RELEASE_TARGETS = %w[ //java/src/org/openqa/selenium/firefox:firefox.publish //java/src/org/openqa/selenium/grid/sessionmap/jdbc:jdbc.publish //java/src/org/openqa/selenium/grid/sessionmap/redis:redis.publish + //java/src/org/openqa/selenium/grid:bom-dependencies.publish + //java/src/org/openqa/selenium/grid:bom.publish //java/src/org/openqa/selenium/grid:grid.publish //java/src/org/openqa/selenium/ie:ie.publish //java/src/org/openqa/selenium/json:json.publish diff --git a/WORKSPACE b/WORKSPACE index f205efadda63c..3e341a656f4cb 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -96,10 +96,6 @@ rules_proto_dependencies() rules_proto_toolchains() -RULES_JVM_EXTERNAL_TAG = "4.5" - -RULES_JVM_EXTERNAL_SHA = "b17d7388feb9bfa7f2fa09031b32707df529f26c91ab9e5d909eb1676badd9a6" - http_archive( name = "rules_jvm_external", patch_args = [ @@ -107,11 +103,10 @@ http_archive( ], patches = [ "//java:rules_jvm_external_javadoc.patch", - "//java:add_missing_dirs.patch", ], - sha256 = RULES_JVM_EXTERNAL_SHA, - strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG, - url = "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/%s.zip" % RULES_JVM_EXTERNAL_TAG, + sha256 = "b6a142dd4ac191d64c855463d4d3de30a7efd629cc65065a833865e34c261b74", + strip_prefix = "rules_jvm_external-cf8286d9b137ab36b89fc6654ce3e6fe48923778", + url = "https://github.com/bazelbuild/rules_jvm_external/archive/cf8286d9b137ab36b89fc6654ce3e6fe48923778.zip", ) load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps") diff --git a/java/BUILD.bazel b/java/BUILD.bazel index 2b097b1ed2ee3..a4b5cfaec3566 100644 --- a/java/BUILD.bazel +++ b/java/BUILD.bazel @@ -1,5 +1,5 @@ -load("@rules_jvm_external//:defs.bzl", "artifact") load("@contrib_rules_jvm//java:defs.bzl", "spotbugs_config") +load(":defs.bzl", "artifact") exports_files( srcs = [ diff --git a/java/defs.bzl b/java/defs.bzl index 7ef99822c8d2b..5089a29c60451 100644 --- a/java/defs.bzl +++ b/java/defs.bzl @@ -3,7 +3,7 @@ load( _java_binary = "java_binary", _java_import = "java_import", ) -load("@rules_jvm_external//:defs.bzl", _artifact = "artifact", _javadoc = "javadoc") +load("@rules_jvm_external//:defs.bzl", _artifact = "artifact", _javadoc = "javadoc", _maven_bom = "maven_bom") load("//java/private:dist_zip.bzl", _java_dist_zip = "java_dist_zip") load("//java/private:library.bzl", _java_export = "java_export", _java_library = "java_library", _java_test = "java_test") load("//java/private:merge_jars.bzl", _merge_jars = "merge_jars") @@ -29,6 +29,7 @@ java_module = _java_module java_selenium_test_suite = _java_selenium_test_suite java_test = _java_test javadoc = _javadoc +maven_bom = _maven_bom merge_jars = _merge_jars selenium_test = _selenium_test JUNIT5_DEPS = _JUNIT5_DEPS diff --git a/java/private/export.bzl b/java/private/export.bzl index f3700d6588816..611c8acd773cf 100644 --- a/java/private/export.bzl +++ b/java/private/export.bzl @@ -3,6 +3,7 @@ load( "javadoc", "pom_file", ) +load("@rules_jvm_external//private/rules:maven_bom_fragment.bzl", "maven_bom_fragment") load("@rules_jvm_external//private/rules:maven_project_jar.bzl", "maven_project_jar") load("@rules_jvm_external//private/rules:maven_publish.bzl", "maven_publish") load("//java/private:module.bzl", "java_module") @@ -16,6 +17,7 @@ def java_export( opens_to = [], exports = [], tags = [], + testonly = None, visibility = None, **kwargs): tags = tags + ["maven_coordinates=%s" % maven_coordinates] @@ -94,6 +96,20 @@ def java_export( visibility = visibility, ) + # We may want to aggregate several `java_export` targets into a single Maven BOM POM + # https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms + maven_bom_fragment( + name = "%s.bom-fragment" % name, + maven_coordinates = maven_coordinates, + artifact = ":%s" % lib_name, + src_artifact = ":%s-maven-source" % name, + javadoc_artifact = None if "no-javadocs" in tags else ":%s-docs" % name, + pom = ":%s-pom" % name, + testonly = testonly, + tags = tags, + visibility = visibility, + ) + # Finally, alias the primary output native.alias( name = name, diff --git a/java/private/module.bzl b/java/private/module.bzl index ac640cd0f0ef3..220967e31cec1 100644 --- a/java/private/module.bzl +++ b/java/private/module.bzl @@ -169,7 +169,7 @@ def _java_module_impl(ctx): ) return [ - DefaultInfo(files = depset([module_jar, src_jar])), + DefaultInfo(files = depset([module_jar])), JavaModuleInfo( name = name, module_path = depset(direct = [module_jar], transitive = [info.module_path for info in all_infos]), diff --git a/java/src/org/openqa/selenium/grid/BUILD.bazel b/java/src/org/openqa/selenium/grid/BUILD.bazel index b9347992ac12d..9943f780b3ccc 100644 --- a/java/src/org/openqa/selenium/grid/BUILD.bazel +++ b/java/src/org/openqa/selenium/grid/BUILD.bazel @@ -1,6 +1,15 @@ load("@rules_jvm_external//:defs.bzl", "artifact") load("//common:defs.bzl", "copy_file") -load("//java:defs.bzl", "java_binary", "java_dist_zip", "java_export", "java_library", "javadoc", "merge_jars") +load( + "//java:defs.bzl", + "java_binary", + "java_dist_zip", + "java_export", + "java_library", + "javadoc", + "maven_bom", + "merge_jars", +) load("//java:version.bzl", "SE_VERSION") load("//java/src/org/openqa/selenium/devtools:versions.bzl", "CDP_DEPS") @@ -82,6 +91,36 @@ java_library( ], ) +# Generated from: bazel query 'kind(maven_publish, set(//java/... //third_party/...))' | sort +# with the selenium rc, bom dependencies (naturally), and CDP implementations removed. +maven_bom( + name = "bom", + bom_pom_template = "bom-pom-template.xml", + dependencies_maven_coordinates = "org.seleniumhq.selenium:selenium-dependencies-bom:%s" % SE_VERSION, + dependencies_pom_template = "bom-pom-template.xml", + java_exports = [ + "//java/src/org/openqa/selenium/chrome:chrome", + "//java/src/org/openqa/selenium/chromium:chromium", + "//java/src/org/openqa/selenium/edge:edge", + "//java/src/org/openqa/selenium/firefox:firefox", + "//java/src/org/openqa/selenium/grid/sessionmap/jdbc:jdbc", + "//java/src/org/openqa/selenium/grid/sessionmap/redis:redis", + "//java/src/org/openqa/selenium/grid:grid", + "//java/src/org/openqa/selenium/ie:ie", + "//java/src/org/openqa/selenium/json:json", + "//java/src/org/openqa/selenium/lift:lift", + "//java/src/org/openqa/selenium/manager:manager", + "//java/src/org/openqa/selenium/remote/http/jdk:jdk", + "//java/src/org/openqa/selenium/remote/http:http", + "//java/src/org/openqa/selenium/remote:remote", + "//java/src/org/openqa/selenium/safari:safari", + "//java/src/org/openqa/selenium/support:support", + "//java/src/org/openqa/selenium:client-combined", + "//java/src/org/openqa/selenium:core", + ] + CDP_DEPS, + maven_coordinates = "org.seleniumhq.selenium:selenium-bom:%s" % SE_VERSION, +) + java_export( name = "grid", srcs = glob( diff --git a/java/src/org/openqa/selenium/grid/bom-pom-template.xml b/java/src/org/openqa/selenium/grid/bom-pom-template.xml new file mode 100755 index 0000000000000..2fcb3f8af1b8c --- /dev/null +++ b/java/src/org/openqa/selenium/grid/bom-pom-template.xml @@ -0,0 +1,80 @@ + + + + 4.0.0 + + {groupId} + {artifactId} + {version} + pom + + {groupId}:{artifactId} + Selenium automates browsers. That's it! What you do with that power is entirely up to you. + https://selenium.dev/ + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + https://github.com/SeleniumHQ/selenium/ + scm:git:https://github.com/SeleniumHQ/selenium.git + scm:git:git@github.com:SeleniumHQ/selenium.git + + + + + simon.m.stewart + Simon Stewart + + Owner + + + + barancev + Alexei Barantsev + + Committer + + + + diemol + Diego Molina + + Committer + + + + james.h.evans.jr + Jim Evans + + Committer + + + + theautomatedtester + David Burns + + Committer + + + + titusfortner + Titus Fortner + + Committer + + + + + + +{dependencies} + + +