| """Java options and protobuf-specific java build rules with those options.""" | |
| load("@rules_java//java:defs.bzl", "java_library") | |
| load("@rules_jvm_external//:defs.bzl", "java_export") | |
| load("//:protobuf_version.bzl", "PROTOBUF_JAVA_VERSION") | |
| load("//java/osgi:osgi.bzl", "osgi_java_library") | |
| JAVA_RELEASE_OPTS = [ | |
| "-source 8", | |
| "-target 8", | |
| "-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_RELEASE_OPTS, | |
| # https://github.com/bazelbuild/rules_jvm_external/issues/1245 | |
| javadocopts = [ | |
| "-notimestamp", | |
| "-use", | |
| "-quiet", | |
| "-Xdoclint:-missing", | |
| "-encoding", | |
| "UTF8", | |
| ], | |
| **kwargs | |
| ) | |
| def protobuf_java_library(**kwargs): | |
| java_library( | |
| **kwargs | |
| ) | |
| def protobuf_versioned_java_library( | |
| automatic_module_name, | |
| 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. | |
| automatic_module_name: (required) The Automatic-Module-Name header that represents | |
| the name of the module when this bundle is used as an automatic | |
| module. | |
| 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_RELEASE_OPTS, | |
| automatic_module_name = automatic_module_name, | |
| 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 | |
| ) |