# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. # def _impl(ctx): class_jar = ctx.outputs.class_jar deps_provider = java_common.merge([dep[java_common.provider] for dep in ctx.attr.deps + ctx.attr.injars + ctx.attr.aspects]) ctx.action( inputs=list(deps_provider.compile_jars) + ctx.files._runtime + ctx.files.aspects + ctx.files.injars + ctx.files.srcs, outputs=[class_jar], arguments=[ "-classpath", ctx.configuration.host_path_separator.join([f.path for f in deps_provider.compile_jars + ctx.files._runtime]), "-aspectpath", ctx.configuration.host_path_separator.join([f.path for f in ctx.files.aspects]), "-injars", ctx.configuration.host_path_separator.join([f.path for f in ctx.files.injars]), "-outjar", class_jar.path, "-source", "1.7", "-target", "1.7", ] + [f.path for f in ctx.files.srcs], progress_message="Building %s" % class_jar.short_path, executable=ctx.executable._ajc) return [java_common.merge( [deps_provider, ctx.attr._runtime[java_common.provider], java_common.create_provider(compile_time_jars=depset([class_jar]), runtime_jars=depset([class_jar]))])] aj_library = rule( implementation = _impl, attrs = { "srcs": attr.label_list( allow_files=FileType([".java", ".aj"]), ), "injars": attr.label_list( allow_files=False, ), "deps": attr.label_list( allow_files=False, ), "aspects": attr.label_list( allow_files=False, ), "_ajc": attr.label( default=Label("//buildutils:ajc"), allow_files=True, executable=True, cfg="host", ), "_runtime": attr.label( default=Label("@aspectj_runtime//jar"), allow_files=False, ), }, outputs = { "class_jar": "lib%{name}.jar", }, )