def _classpath_collector(ctx): all = set() for d in ctx.attr.deps: if hasattr(d, 'java'): all += d.java.transitive_runtime_deps all += d.java.compilation_info.runtime_classpath elif hasattr(d, 'files'): all += d.files as_strs = [c.path for c in all] ctx.file_action(output= ctx.outputs.runtime, content="\n".join(sorted(as_strs))) classpath_collector = rule( implementation = _classpath_collector, attrs = { "deps": attr.label_list(), }, outputs={ "runtime": "%{name}.runtime_classpath" })