| def _classpath_collector(ctx): |
| all = [] |
| for d in ctx.attr.deps: |
| if JavaInfo in d: |
| all.append(d[JavaInfo].transitive_runtime_deps) |
| if hasattr(d[JavaInfo].compilation_info, "runtime_classpath"): |
| 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, |
| ) |