# Copyright 2021 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ Definition of java_library rule. """ load("//java/common/rules/impl:basic_java_library_impl.bzl", "basic_java_library", "construct_defaultinfo") # copybara: default visibility def bazel_java_library_rule( ctx, srcs = [], deps = [], runtime_deps = [], plugins = [], exports = [], exported_plugins = [], resources = [], javacopts = [], neverlink = False, proguard_specs = [], add_exports = [], add_opens = [], bootclasspath = None, javabuilder_jvm_flags = None): """Implements java_library. Use this call when you need to produce a fully fledged java_library from another rule's implementation. Args: ctx: (RuleContext) Used to register the actions. srcs: (list[File]) The list of source files that are processed to create the target. deps: (list[Target]) The list of other libraries to be linked in to the target. runtime_deps: (list[Target]) Libraries to make available to the final binary or test at runtime only. plugins: (list[Target]) Java compiler plugins to run at compile-time. exports: (list[Target]) Exported libraries. exported_plugins: (list[Target]) The list of `java_plugin`s (e.g. annotation processors) to export to libraries that directly depend on this library. resources: (list[File]) A list of data files to include in a Java jar. javacopts: (list[str]) Extra compiler options for this library. neverlink: (bool) Whether this library should only be used for compilation and not at runtime. proguard_specs: (list[File]) Files to be used as Proguard specification. add_exports: (list[str]) Allow this library to access the given /. add_opens: (list[str]) Allow this library to reflectively access the given /. bootclasspath: (Target) The JDK APIs to compile this library against. javabuilder_jvm_flags: (list[str]) Additional JVM flags to pass to JavaBuilder. Returns: (dict[str, provider]) A list containing DefaultInfo, JavaInfo, InstrumentedFilesInfo, OutputGroupsInfo, ProguardSpecProvider providers. """ if not srcs and deps: fail("deps not allowed without srcs; move to runtime_deps?") target, base_info = basic_java_library( ctx, srcs, deps, runtime_deps, plugins, exports, exported_plugins, resources, [], # resource_jars [], # class_pathresources javacopts, neverlink, proguard_specs = proguard_specs, add_exports = add_exports, add_opens = add_opens, bootclasspath = bootclasspath, javabuilder_jvm_flags = javabuilder_jvm_flags, ) target["DefaultInfo"] = construct_defaultinfo( ctx, base_info.files_to_build, base_info.runfiles, neverlink, exports, runtime_deps, ) target["OutputGroupInfo"] = OutputGroupInfo(**base_info.output_groups) return target