text: 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,
  )
  