|  | # Copyright 2020 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. | 
|  |  | 
|  | """Provides rules to run ijar and single_jar from java_toolchain.""" | 
|  |  | 
|  | load("@rules_java//java/common:java_common.bzl", "java_common") | 
|  |  | 
|  | def _run_ijar(ctx): | 
|  | ijar_jar = java_common.run_ijar( | 
|  | ctx.actions, | 
|  | jar = ctx.file.jar, | 
|  | java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo], | 
|  | ) | 
|  | return [DefaultInfo(files = depset([ijar_jar]))] | 
|  |  | 
|  | run_ijar = rule( | 
|  | implementation = _run_ijar, | 
|  | doc = "Runs ijar over the given jar.", | 
|  | attrs = { | 
|  | "jar": attr.label(mandatory = True, allow_single_file = True), | 
|  | "_java_toolchain": attr.label( | 
|  | default = "//tools/jdk:current_java_toolchain", | 
|  | providers = [java_common.JavaToolchainInfo], | 
|  | ), | 
|  | }, | 
|  | toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], | 
|  | ) | 
|  |  | 
|  | def _run_singlejar(ctx): | 
|  | args = ctx.actions.args() | 
|  | args.add("--exclude_build_data") | 
|  | args.add("--dont_change_compression") | 
|  | args.add_all("--sources", ctx.files.srcs) | 
|  | args.add_all("--include_prefixes", ctx.attr.include_prefixes) | 
|  | args.add("--normalize") | 
|  | args.add("--output", ctx.outputs.out) | 
|  | ctx.actions.run( | 
|  | inputs = ctx.files.srcs, | 
|  | outputs = [ctx.outputs.out], | 
|  | executable = ctx.attr._java_toolchain[java_common.JavaToolchainInfo].single_jar, | 
|  | arguments = [args], | 
|  | ) | 
|  |  | 
|  | return [DefaultInfo(files = depset([ctx.outputs.out]))] | 
|  |  | 
|  | run_singlejar = rule( | 
|  | implementation = _run_singlejar, | 
|  | doc = "Runs singlejar over the given files.", | 
|  | attrs = { | 
|  | "srcs": attr.label_list(mandatory = True), | 
|  | "out": attr.output(mandatory = True), | 
|  | "include_prefixes": attr.string_list(), | 
|  | "_java_toolchain": attr.label( | 
|  | default = "//tools/jdk:current_java_toolchain", | 
|  | providers = [java_common.JavaToolchainInfo], | 
|  | ), | 
|  | }, | 
|  | ) |