Re-attach OSGI headers to lite,core, and util. This information was dropped in the move from maven to bazel. PiperOrigin-RevId: 518267412
diff --git a/build_defs/java_opts.bzl b/build_defs/java_opts.bzl index 8e0fb0a..e9c0407 100644 --- a/build_defs/java_opts.bzl +++ b/build_defs/java_opts.bzl
@@ -2,6 +2,8 @@ load("@rules_java//java:defs.bzl", "java_library") load("@rules_jvm_external//:defs.bzl", "java_export") +load("//java/osgi:osgi.bzl", "osgi_java_library") +load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION") JAVA_OPTS = [ "-source 8", @@ -9,6 +11,9 @@ "-Xep:Java8ApiChecker:ERROR", ] +BUNDLE_DOC_URL = "https://developers.google.com/protocol-buffers/" +BUNDLE_LICENSE = "https://opensource.org/licenses/BSD-3-Clause" + def protobuf_java_export(**kwargs): java_export( javacopts = JAVA_OPTS, @@ -20,3 +25,53 @@ javacopts = JAVA_OPTS, **kwargs ) + +def protobuf_versioned_java_library( + bundle_description, + bundle_name, + bundle_symbolic_name, + bundle_additional_imports = [], + bundle_additional_exports = [], + **kwargs): + """Extends `java_library` to add OSGi headers to the MANIFEST.MF using bndlib + + This macro should be usable as a drop-in replacement for java_library. + + The additional arguments are given the bndlib tool to generate an OSGi-compliant manifest file. + See [bnd documentation](https://bnd.bndtools.org/chapters/110-introduction.html) + + Takes all the args that are standard for a java_library target plus the following. + Args: + bundle_description: (required) The Bundle-Description header defines a short + description of this bundle. + bundle_name: (required) The Bundle-Name header defines a readable name for this + bundle. This should be a short, human-readable name that can + contain spaces. + bundle_symbolic_name: (required) The Bundle-SymbolicName header specifies a + non-localizable name for this bundle. The bundle symbolic name + together with a version must identify a unique bundle though it can + be installed multiple times in a framework. The bundle symbolic + name should be based on the reverse domain name convention. + bundle_additional_exports: The Export-Package header contains a + declaration of exported packages. These are additional export + package statements to be added before the default wildcard export + "*;version={$Bundle-Version}". + bundle_additional_imports: The Import-Package header declares the + imported packages for this bundle. These are additional import + package statements to be added before the default wildcard import + "*". + **kwargs: Additional key-word arguments that are passed to the internal + java_library target. + """ + osgi_java_library( + javacopts = JAVA_OPTS, + bundle_doc_url = BUNDLE_DOC_URL, + bundle_license = BUNDLE_LICENSE, + bundle_version = PROTOBUF_JAVA_VERSION, + bundle_description = bundle_description, + bundle_name = bundle_name, + bundle_symbolic_name = bundle_symbolic_name, + bundle_additional_exports = bundle_additional_exports, + bundle_additional_imports = bundle_additional_imports + ["sun.misc;resolution:=optional"], + **kwargs + )
diff --git a/java/core/BUILD.bazel b/java/core/BUILD.bazel index f08cf4a..49bf0e0 100644 --- a/java/core/BUILD.bazel +++ b/java/core/BUILD.bazel
@@ -2,7 +2,7 @@ load("@rules_java//java:defs.bzl", "java_lite_proto_library", "java_proto_library") load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library") -load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library") +load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library", "protobuf_versioned_java_library") load("//conformance:defs.bzl", "conformance_test") load("//:protobuf.bzl", "internal_gen_well_known_protos_java") load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION") @@ -121,11 +121,16 @@ ) # Should be used as `//java/lite`. -protobuf_java_library( +protobuf_versioned_java_library( name = "lite", srcs = LITE_SRCS + [ ":gen_well_known_protos_javalite", ], + bundle_description = "Lite version of Protocol Buffers library. This " + + "version is optimized for code size, but does not " + + "guarantee API/ABI stability.", + bundle_name = "Protocol Buffers [Lite]", + bundle_symbolic_name = "com.google.protobuf", visibility = [ "//java/lite:__pkg__", ], @@ -166,7 +171,7 @@ ], ) -protobuf_java_library( +protobuf_versioned_java_library( name = "core", srcs = glob( [ @@ -176,6 +181,11 @@ ) + [ ":gen_well_known_protos_java", ], + bundle_description = "Core Protocol Buffers library. Protocol Buffers " + + "are a way of encoding structured data in an " + + "efficient yet extensible format.", + bundle_name = "Protocol Buffers [Core]", + bundle_symbolic_name = "com.google.protobuf", visibility = ["//visibility:public"], exports = [ ":lite_runtime_only",
diff --git a/java/osgi/BUILD.bazel b/java/osgi/BUILD.bazel new file mode 100644 index 0000000..223e6fe --- /dev/null +++ b/java/osgi/BUILD.bazel
@@ -0,0 +1,16 @@ +load("@rules_java//java:defs.bzl", "java_binary") + +package( + default_visibility = ["//java:__subpackages__"], +) + +java_binary( + name = "osgi_wrapper", + srcs = ["OsgiWrapper.java"], + main_class = "com.google.protobuf.osgi.OsgiWrapper", + deps = [ + "@maven//:biz_aQute_bnd_biz_aQute_bndlib", + "@maven//:com_google_guava_guava", + "@maven//:info_picocli_picocli", + ], +)
diff --git a/java/osgi/OsgiWrapper.java b/java/osgi/OsgiWrapper.java new file mode 100644 index 0000000..efff06b --- /dev/null +++ b/java/osgi/OsgiWrapper.java
@@ -0,0 +1,166 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf.osgi; + +import aQute.bnd.osgi.Analyzer; +import aQute.bnd.osgi.Jar; +import java.io.File; +import java.util.Arrays; +import java.util.concurrent.Callable; +import java.util.jar.Manifest; +import java.util.stream.Collectors; +import picocli.CommandLine; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; + +/** Java binary that runs bndlib to analyze a jar file to generate OSGi bundle manifest. */ +@Command(name = "osgi_wrapper") +public final class OsgiWrapper implements Callable<Integer> { + private static final String REMOVEHEADERS = + Arrays.stream( + new String[] { + "Embed-Dependency", + "Embed-Transitive", + "Built-By", + // "Tool", + "Created-By", + // "Build-Jdk", + "Originally-Created-By", + "Archiver-Version", + "Include-Resource", + "Private-Package", + "Ignore-Package", + // "Bnd-LastModified", + "Target-Label" + }) + .collect(Collectors.joining(",")); + + @Option( + names = {"--input_jar"}, + description = "The jar file to wrap with OSGi metadata") + private File inputJar; + + @Option( + names = {"--output_jar"}, + description = "Output path to the wrapped jar") + private File outputJar; + + @Option( + names = {"--classpath"}, + description = "The classpath that contains dependencies of the input jar, separated with :") + private String classpath; + + @Option( + names = {"--bundle_copyright"}, + description = "Copyright string for the bundle") + private String bundleCopyright; + + @Option( + names = {"--bundle_description"}, + description = "Description of the bundle") + private String bundleDescription; + + @Option( + names = {"--bundle_doc_url"}, + description = "Documentation URL for the bundle") + private String bundleDocUrl; + + @Option( + names = {"--bundle_license"}, + description = "URL for the license of the bundle") + private String bundleLicense; + + @Option( + names = {"--bundle_name"}, + description = "The name of the bundle") + private String bundleName; + + @Option( + names = {"--bundle_symbolic_name"}, + description = "The symbolic name of the bundle") + private String bundleSymbolicName; + + @Option( + names = {"--bundle_version"}, + description = "The version of the bundle") + private String bundleVersion; + + @Option( + names = {"--export_package"}, + description = "The exported packages from this bundle") + private String exportPackage; + + @Option( + names = {"--import_package"}, + description = "The imported packages from this bundle") + private String importPackage; + + @Override + public Integer call() throws Exception { + Jar bin = new Jar(inputJar); + + Analyzer analyzer = new Analyzer(); + analyzer.setJar(bin); + analyzer.setProperty(Analyzer.BUNDLE_NAME, bundleName); + analyzer.setProperty(Analyzer.BUNDLE_SYMBOLICNAME, bundleSymbolicName); + analyzer.setProperty(Analyzer.BUNDLE_VERSION, bundleVersion); + analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackage); + analyzer.setProperty(Analyzer.EXPORT_PACKAGE, exportPackage); + analyzer.setProperty(Analyzer.BUNDLE_DESCRIPTION, bundleDescription); + analyzer.setProperty(Analyzer.BUNDLE_COPYRIGHT, bundleCopyright); + analyzer.setProperty(Analyzer.BUNDLE_DOCURL, bundleDocUrl); + analyzer.setProperty(Analyzer.BUNDLE_LICENSE, bundleLicense); + analyzer.setProperty(Analyzer.REMOVEHEADERS, REMOVEHEADERS); + + if (classpath != null) { + for (String dep : Arrays.asList(classpath.split(":"))) { + analyzer.addClasspath(new File(dep)); + } + } + + analyzer.analyze(); + + Manifest manifest = analyzer.calcManifest(); + + if (analyzer.isOk()) { + analyzer.getJar().setManifest(manifest); + if (analyzer.save(outputJar, true)) { + return 0; + } + } + return 1; + } + + public static void main(String[] args) { + int exitCode = new CommandLine(new OsgiWrapper()).execute(args); + System.exit(exitCode); + } +}
diff --git a/java/osgi/osgi.bzl b/java/osgi/osgi.bzl new file mode 100644 index 0000000..ec0b18a --- /dev/null +++ b/java/osgi/osgi.bzl
@@ -0,0 +1,235 @@ +""" Custom rule to generate OSGi Manifest """ + +load("@rules_java//java:defs.bzl", "java_library") + +# Note that this rule is currently agnostic of protobuf concerns and could be +# pulled out as a general purpose helper to allow migrations from maven to bazel +# for OSS release builds. +# +# There are (at least) 3 things that would nice to fix about this rule: +# 1. `deps` are captured by wrapping the java_library target into the +# osgi_java_library target -- if possible, it would be better to get +# the deps from the JavaInfo or some other provider from any java_library +# target. +# 2. imports are probably not being calculated properly for deps that are more +# than 1 step deep in the dependency chain. For example: //java:core depends +# on //java/core:lite_runtime_only but does not calculate the need for +# "sun.misc" like the //java/core:lite target does (even though the same code +# is transitively included. Those imports can be explicitly added through +# `bundle_additional_imports`, but it would be better if the calculation +# applied correctly to transitive dependencies. +# 3. Versioned imports didn't work properly when an ijar is used as the +# "compile_jar". Thus, this rule uses the full jar as the compile_jar, +# which is probably sub-optimal. +def osgi_java_library( + name, + bundle_description, + bundle_doc_url, + bundle_license, + bundle_name, + bundle_symbolic_name, + bundle_version, + bundle_additional_imports = [], + bundle_additional_exports = [], + deps = [], + exports = [], + exported_plugins = [], + neverlink = False, + runtime_deps = [], + visibility = [], + **kwargs): + """Extends `java_library` to add OSGi headers to the MANIFEST.MF using bndlib + + This macro should be usable as a drop-in replacement for java_library. + + The additional arguments are given the bndlib tool to generate an OSGi-compliant manifest file. + See [bnd documentation](https://bnd.bndtools.org/chapters/110-introduction.html) + + Args: + name: (required) A unique name for this target. + bundle_description: (required) The Bundle-Description header defines a short + description of this bundle. + bundle_doc_url: (required) The Bundle-DocURL headers must contain a URL pointing + to documentation about this bundle. + bundle_license: (required) The Bundle-License header provides an optional machine + readable form of license information. + bundle_name: (required) The Bundle-Name header defines a readable name for this + bundle. This should be a short, human-readable name that can + contain spaces. + bundle_symbolic_name: (required) The Bundle-SymbolicName header specifies a + non-localizable name for this bundle. The bundle symbolic name + together with a version must identify a unique bundle though it can + be installed multiple times in a framework. The bundle symbolic + name should be based on the reverse domain name convention. + bundle_version: (required) The Bundle-Version header specifies the version string + for this bundle. The version string is expected to follow semantic + versioning conventions MAJOR.MINOR.PATCH[.BUILD] + bundle_additional_exports: The Export-Package header contains a + declaration of exported packages. These are additional export + package statements to be added before the default wildcard export + "*;version={$Bundle-Version}". + bundle_additional_imports: The Import-Package header declares the + imported packages for this bundle. These are additional import + package statements to be added before the default wildcard import + "*". + deps: The list of libraries to link into this library. See general + comments about deps at Typical attributes defined by most build + rules. The jars built by java_library rules listed in deps will be + on the compile-time classpath of this rule. Furthermore the + transitive closure of their deps, runtime_deps and exports will be + on the runtime classpath. By contrast, targets in the data + attribute are included in the runfiles but on neither the + compile-time nor runtime classpath. + exports: Exported libraries. + exported_plugins: The list of java_plugins (e.g. annotation processors) + to export to libraries that directly depend on this library. The + specified list of java_plugins will be applied to any library which + directly depends on this library, just as if that library had + explicitly declared these labels in plugins. + neverlink: Whether this library should only be used for compilation and + not at runtime. Useful if the library will be provided by the runtime + environment during execution. Examples of such libraries are the IDE + APIs for IDE plug-ins or tools.jar for anything running on a standard + JDK. + runtime_deps: Libraries to make available to the final binary or test + at runtime only. Like ordinary deps, these will appear on the runtime + classpath, but unlike them, not on the compile-time classpath. + Dependencies needed only at runtime should be listed here. + Dependency-analysis tools should ignore targets that appear in both + runtime_deps and deps + visibility: The visibility attribute on a target controls whether the + target can be used in other packages. See the documentation for + visibility. + **kwargs: Additional key-word arguments that are passed to the internal + java_library target. + """ + + # Build the private jar without the OSGI manifest + private_library_name = "%s-no-manifest-do-not-use" % name + java_library( + name = private_library_name, + deps = deps, + runtime_deps = runtime_deps, + neverlink = True, + exported_plugins = exported_plugins, + visibility = ["//visibility:private"], + **kwargs + ) + + # Repackage the jar with an OSGI manifest + _osgi_jar( + name = name, + bundle_description = bundle_description, + bundle_doc_url = bundle_doc_url, + bundle_license = bundle_license, + bundle_name = bundle_name, + bundle_symbolic_name = bundle_symbolic_name, + bundle_version = bundle_version, + export_package = bundle_additional_exports + ["*;version=${Bundle-Version}"], + import_package = bundle_additional_imports + ["*"], + target = private_library_name, + deps = deps, + runtime_deps = runtime_deps, + exported_plugins = exported_plugins, + neverlink = neverlink, + exports = exports, + visibility = visibility, + ) + +def _run_osgi_wrapper(ctx, input_jar, classpath_jars, output_jar): + args = ctx.actions.args() + args.add_joined("--classpath", classpath_jars, join_with = ":") + args.add("--input_jar", input_jar.path) + args.add("--output_jar", output_jar.path) + args.add("--bundle_copyright", ctx.attr.bundle_copyright) + args.add("--bundle_description", ctx.attr.bundle_description) + args.add("--bundle_doc_url", ctx.attr.bundle_doc_url) + args.add("--bundle_license", ctx.attr.bundle_license) + args.add("--bundle_name", ctx.attr.bundle_name) + args.add("--bundle_version", ctx.attr.bundle_version) + args.add("--bundle_symbolic_name", ctx.attr.bundle_symbolic_name) + args.add_joined("--export_package", ctx.attr.export_package, join_with = ",") + args.add_joined("--import_package", ctx.attr.import_package, join_with = ",") + + ctx.actions.run( + inputs = [input_jar] + classpath_jars, + executable = ctx.executable._osgi_wrapper_exe, + arguments = [args], + outputs = [output_jar], + progress_message = "Generating OSGi bundle Manifest for %s" % input_jar.path, + ) + +def _osgi_jar_impl(ctx): + if len(ctx.attr.target[JavaInfo].java_outputs) != 1: + fail("osgi_jar rule can only be used on a single java target.") + target_java_output = ctx.attr.target[JavaInfo].java_outputs[0] + + if len(target_java_output.source_jars) > 1: + fail("osgi_jar rule doesn't know how to deal with more than one source jar.") + source_jar = target_java_output.source_jars[0] + + output_jar = ctx.outputs.output_jar + + input_jar = target_java_output.class_jar + classpath_jars = ctx.attr.target[JavaInfo].compilation_info.compilation_classpath.to_list() + + _run_osgi_wrapper(ctx, input_jar, classpath_jars, output_jar) + + return [ + DefaultInfo( + files = depset([output_jar]), + # Workaround for https://github.com/bazelbuild/bazel/issues/15043 + # Bazel's native rule such as sh_test do not pick up 'files' in + # DefaultInfo for a target in 'data'. + data_runfiles = ctx.runfiles([output_jar]), + ), + JavaInfo( + output_jar = output_jar, + + # compile_jar should be an ijar, but using an ijar results in + # missing protobuf import version. + compile_jar = output_jar, + source_jar = source_jar, + compile_jdeps = target_java_output.compile_jdeps, + generated_class_jar = target_java_output.generated_class_jar, + generated_source_jar = target_java_output.generated_source_jar, + native_headers_jar = target_java_output.native_headers_jar, + manifest_proto = target_java_output.manifest_proto, + neverlink = ctx.attr.neverlink, + deps = [dep[JavaInfo] for dep in ctx.attr.deps], + runtime_deps = [dep[JavaInfo] for dep in ctx.attr.runtime_deps], + exports = [exp[JavaInfo] for exp in ctx.attr.exports], + exported_plugins = ctx.attr.exported_plugins, + jdeps = target_java_output.jdeps, + ), + ] + +_osgi_jar = rule( + implementation = _osgi_jar_impl, + outputs = { + "output_jar": "lib%{name}.jar", + }, + attrs = { + "bundle_copyright": attr.string(), + "bundle_description": attr.string(), + "bundle_doc_url": attr.string(), + "bundle_license": attr.string(), + "bundle_name": attr.string(), + "bundle_version": attr.string(), + "bundle_symbolic_name": attr.string(), + "export_package": attr.string_list(), + "import_package": attr.string_list(), + "target": attr.label(), + "deps": attr.label_list(), + "runtime_deps": attr.label_list(), + "exports": attr.label_list(), + "neverlink": attr.bool(), + "exported_plugins": attr.label_list(), + "_osgi_wrapper_exe": attr.label( + executable = True, + cfg = "exec", + allow_files = True, + default = Label("//java/osgi:osgi_wrapper"), + ), + }, +)
diff --git a/java/util/BUILD.bazel b/java/util/BUILD.bazel index 3d042d3..1bb2358 100644 --- a/java/util/BUILD.bazel +++ b/java/util/BUILD.bazel
@@ -1,15 +1,18 @@ load("@rules_java//java:defs.bzl", "java_proto_library") -load("@rules_pkg//:mappings.bzl", "pkg_filegroup", "pkg_files", "strip_prefix") +load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") load("@rules_proto//proto:defs.bzl", "proto_library") -load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_java_library") +load("//build_defs:java_opts.bzl", "protobuf_java_export", "protobuf_versioned_java_library") load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION") load("//java/internal:testing.bzl", "junit_tests") -protobuf_java_library( +protobuf_versioned_java_library( name = "util", srcs = glob([ "src/main/java/com/google/protobuf/util/*.java", ]), + bundle_description = "Utilities for Protocol Buffers", + bundle_name = "Protocol Buffers [Util]", + bundle_symbolic_name = "com.google.protobuf.util", visibility = ["//visibility:public"], deps = [ "//java/core",
diff --git a/maven_install.json b/maven_install.json index efb3f03..7d033ce 100644 --- a/maven_install.json +++ b/maven_install.json
@@ -1,13 +1,60 @@ { "dependency_tree": { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1875290602, - "__RESOLVED_ARTIFACTS_HASH": -1248440885, + "__INPUT_ARTIFACTS_HASH": 867318050, + "__RESOLVED_ARTIFACTS_HASH": -2034614194, "conflict_resolution": { "com.google.errorprone:error_prone_annotations:2.5.1": "com.google.errorprone:error_prone_annotations:2.11.0" }, "dependencies": [ { + "coord": "biz.aQute.bnd:biz.aQute.bnd.util:6.4.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.util/6.4.0/biz.aQute.bnd.util-6.4.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.util/6.4.0/biz.aQute.bnd.util-6.4.0.jar", + "https://repo.maven.apache.org/maven2/biz/aQute/bnd/biz.aQute.bnd.util/6.4.0/biz.aQute.bnd.util-6.4.0.jar" + ], + "sha256": "65b5bd4a0fab16812f1800c98ff74a038f37a38bfe899af382efed4efdc1e3e1", + "url": "https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd.util/6.4.0/biz.aQute.bnd.util-6.4.0.jar" + }, + { + "coord": "biz.aQute.bnd:biz.aQute.bndlib:6.4.0", + "dependencies": [ + "biz.aQute.bnd:biz.aQute.bnd.util:6.4.0", + "org.osgi:org.osgi.dto:1.0.0", + "org.osgi:org.osgi.framework:1.8.0", + "org.osgi:org.osgi.resource:1.0.0", + "org.osgi:org.osgi.service.log:1.3.0", + "org.osgi:org.osgi.service.repository:1.1.0", + "org.osgi:org.osgi.util.function:1.2.0", + "org.osgi:org.osgi.util.promise:1.2.0", + "org.osgi:org.osgi.util.tracker:1.5.4", + "org.osgi:osgi.annotation:8.0.1", + "org.slf4j:slf4j-api:1.7.25" + ], + "directDependencies": [ + "biz.aQute.bnd:biz.aQute.bnd.util:6.4.0", + "org.osgi:org.osgi.dto:1.0.0", + "org.osgi:org.osgi.framework:1.8.0", + "org.osgi:org.osgi.resource:1.0.0", + "org.osgi:org.osgi.service.log:1.3.0", + "org.osgi:org.osgi.service.repository:1.1.0", + "org.osgi:org.osgi.util.function:1.2.0", + "org.osgi:org.osgi.util.promise:1.2.0", + "org.osgi:org.osgi.util.tracker:1.5.4", + "org.slf4j:slf4j-api:1.7.25" + ], + "file": "v1/https/repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/6.4.0/biz.aQute.bndlib-6.4.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/6.4.0/biz.aQute.bndlib-6.4.0.jar", + "https://repo.maven.apache.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/6.4.0/biz.aQute.bndlib-6.4.0.jar" + ], + "sha256": "357145074872f9dbf67e629fcd237e6152707e575d735df4535282f9f588d2d8", + "url": "https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bndlib/6.4.0/biz.aQute.bndlib-6.4.0.jar" + }, + { "coord": "com.google.auto.value:auto-value-annotations:1.8.1", "dependencies": [], "directDependencies": [], @@ -528,6 +575,18 @@ "url": "https://repo1.maven.org/maven2/com/sun/jersey/jersey-core/1.19.4/jersey-core-1.19.4.jar" }, { + "coord": "info.picocli:picocli:4.6.3", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/info/picocli/picocli/4.6.3/picocli-4.6.3.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/info/picocli/picocli/4.6.3/picocli-4.6.3.jar", + "https://repo.maven.apache.org/maven2/info/picocli/picocli/4.6.3/picocli-4.6.3.jar" + ], + "sha256": "b0a5159e926de8084ff066025142270443533656bc599b8bb31d14d11fd138a4", + "url": "https://repo1.maven.org/maven2/info/picocli/picocli/4.6.3/picocli-4.6.3.jar" + }, + { "coord": "javax.annotation:javax.annotation-api:1.3.2", "dependencies": [], "directDependencies": [], @@ -684,6 +743,128 @@ "url": "https://repo1.maven.org/maven2/org/objenesis/objenesis/3.2/objenesis-3.2.jar" }, { + "coord": "org.osgi:org.osgi.dto:1.0.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.dto/1.0.0/org.osgi.dto-1.0.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.dto/1.0.0/org.osgi.dto-1.0.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.dto/1.0.0/org.osgi.dto-1.0.0.jar" + ], + "sha256": "cb75f3c7e48e5a31a31df22e26873346f5bf659e2dcab2369e031e4850d2ff43", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.dto/1.0.0/org.osgi.dto-1.0.0.jar" + }, + { + "coord": "org.osgi:org.osgi.framework:1.8.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.framework/1.8.0/org.osgi.framework-1.8.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.framework/1.8.0/org.osgi.framework-1.8.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.framework/1.8.0/org.osgi.framework-1.8.0.jar" + ], + "sha256": "ec194b7871af27681716ff05259319a5c3c9b9727e8000e9e832499b93484b4e", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.framework/1.8.0/org.osgi.framework-1.8.0.jar" + }, + { + "coord": "org.osgi:org.osgi.resource:1.0.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.resource/1.0.0/org.osgi.resource-1.0.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.resource/1.0.0/org.osgi.resource-1.0.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.resource/1.0.0/org.osgi.resource-1.0.0.jar" + ], + "sha256": "81fc50f1f1d38a4af28e131907d4afe213249aab05060484edca0e60c4af9b4a", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.resource/1.0.0/org.osgi.resource-1.0.0.jar" + }, + { + "coord": "org.osgi:org.osgi.service.log:1.3.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.service.log/1.3.0/org.osgi.service.log-1.3.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.service.log/1.3.0/org.osgi.service.log-1.3.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.service.log/1.3.0/org.osgi.service.log-1.3.0.jar" + ], + "sha256": "ff6710c4856d32684cf3ebdc45248f41036ff734f2b03bbc08c4609a61fecfa0", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.service.log/1.3.0/org.osgi.service.log-1.3.0.jar" + }, + { + "coord": "org.osgi:org.osgi.service.repository:1.1.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.service.repository/1.1.0/org.osgi.service.repository-1.1.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.service.repository/1.1.0/org.osgi.service.repository-1.1.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.service.repository/1.1.0/org.osgi.service.repository-1.1.0.jar" + ], + "sha256": "c5553e95b459529192433486d4c4cc22ff45a2eae4968484f9f717319264a532", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.service.repository/1.1.0/org.osgi.service.repository-1.1.0.jar" + }, + { + "coord": "org.osgi:org.osgi.util.function:1.2.0", + "dependencies": [ + "org.osgi:osgi.annotation:8.0.1" + ], + "directDependencies": [ + "org.osgi:osgi.annotation:8.0.1" + ], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.util.function/1.2.0/org.osgi.util.function-1.2.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.function/1.2.0/org.osgi.util.function-1.2.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.util.function/1.2.0/org.osgi.util.function-1.2.0.jar" + ], + "sha256": "208819c7c71690c15a6bb8b187474e7f9d0147946b680182a62b9f222ae014ec", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.function/1.2.0/org.osgi.util.function-1.2.0.jar" + }, + { + "coord": "org.osgi:org.osgi.util.promise:1.2.0", + "dependencies": [ + "org.osgi:org.osgi.util.function:1.2.0", + "org.osgi:osgi.annotation:8.0.1" + ], + "directDependencies": [ + "org.osgi:org.osgi.util.function:1.2.0", + "org.osgi:osgi.annotation:8.0.1" + ], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.util.promise/1.2.0/org.osgi.util.promise-1.2.0.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.promise/1.2.0/org.osgi.util.promise-1.2.0.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.util.promise/1.2.0/org.osgi.util.promise-1.2.0.jar" + ], + "sha256": "fef86e64f584d012a16a0306160764f6179663b90988a226c4641b920f3a4b36", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.promise/1.2.0/org.osgi.util.promise-1.2.0.jar" + }, + { + "coord": "org.osgi:org.osgi.util.tracker:1.5.4", + "dependencies": [ + "org.osgi:osgi.annotation:8.0.1" + ], + "directDependencies": [ + "org.osgi:osgi.annotation:8.0.1" + ], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/org.osgi.util.tracker/1.5.4/org.osgi.util.tracker-1.5.4.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.tracker/1.5.4/org.osgi.util.tracker-1.5.4.jar", + "https://repo.maven.apache.org/maven2/org/osgi/org.osgi.util.tracker/1.5.4/org.osgi.util.tracker-1.5.4.jar" + ], + "sha256": "7d78c2cc9bcb6421c24f17aa097866ce8d9115c219a4f8d6cc753bc4dfb97efa", + "url": "https://repo1.maven.org/maven2/org/osgi/org.osgi.util.tracker/1.5.4/org.osgi.util.tracker-1.5.4.jar" + }, + { + "coord": "org.osgi:osgi.annotation:8.0.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/osgi/osgi.annotation/8.0.1/osgi.annotation-8.0.1.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/osgi/osgi.annotation/8.0.1/osgi.annotation-8.0.1.jar", + "https://repo.maven.apache.org/maven2/org/osgi/osgi.annotation/8.0.1/osgi.annotation-8.0.1.jar" + ], + "sha256": "a0e8a4c362bd3600812f37b0ea45fba966c7bc049d01fed56a09ecc74082759e", + "url": "https://repo1.maven.org/maven2/org/osgi/osgi.annotation/8.0.1/osgi.annotation-8.0.1.jar" + }, + { "coord": "org.ow2.asm:asm-analysis:7.2", "dependencies": [ "org.ow2.asm:asm-tree:7.2", @@ -767,6 +948,18 @@ ], "sha256": "0df97574914aee92fd349d0cb4e00f3345d45b2c239e0bb50f0a90ead47888e0", "url": "https://repo1.maven.org/maven2/org/ow2/asm/asm/9.0/asm-9.0.jar" + }, + { + "coord": "org.slf4j:slf4j-api:1.7.25", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar", + "mirror_urls": [ + "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar", + "https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar" + ], + "sha256": "18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79", + "url": "https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar" } ], "version": "0.1.0"
diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl index 92cb765..7a28404 100644 --- a/protobuf_deps.bzl +++ b/protobuf_deps.bzl
@@ -13,6 +13,8 @@ "com.google.truth:truth:1.1.2", "junit:junit:4.13.2", "org.mockito:mockito-core:4.3.1", + "biz.aQute.bnd:biz.aQute.bndlib:6.4.0", + "info.picocli:picocli:4.6.3", ] def _github_archive(repo, commit, **kwargs):