| def _classpath_collector(ctx): | |
| all = [] | |
| for d in ctx.attr.deps: | |
| if JavaInfo in d: | |
| all.append(d[JavaInfo].transitive_runtime_deps) | |
| all.append(d[JavaInfo].compilation_info.runtime_classpath) | |
| elif hasattr(d, "files"): | |
| all.append(d.files) | |
| as_strs = [c.path for c in depset(transitive = all).to_list()] | |
| ctx.actions.write( | |
| output = ctx.outputs.runtime, | |
| content = "\n".join(sorted(as_strs)), | |
| ) | |
| classpath_collector = rule( | |
| attrs = { | |
| "deps": attr.label_list(), | |
| }, | |
| outputs = { | |
| "runtime": "%{name}.runtime_classpath", | |
| }, | |
| implementation = _classpath_collector, | |
| ) |