code: def classpath(self, targets, classpath_prefix=None, classpath_product=None, exclude_scopes=None,
                  include_scopes=None):
      
      include_scopes = Scopes.JVM_RUNTIME_SCOPES if include_scopes is None else include_scopes
      classpath_product = classpath_product or self.context.products.get_data('runtime_classpath')
      closure = BuildGraph.closure(targets, bfs=True, include_scopes=include_scopes,
                                   exclude_scopes=exclude_scopes, respect_intransitive=True)
  
      classpath_for_targets = ClasspathUtil.classpath(closure, classpath_product, self.confs)
      classpath = list(classpath_prefix or ())
      classpath.extend(classpath_for_targets)
      return classpath
docs: Builds a transitive classpath for the given targets.
  
      Optionally includes a classpath prefix or building from a non-default classpath product.
  
      :param targets: the targets for which to build the transitive classpath.
      :param classpath_prefix: optional additional entries to prepend to the classpath.
      :param classpath_product: an optional ClasspathProduct from which to build the classpath. if not
      specified, the runtime_classpath will be used.
      :param :class:`pants.build_graph.target_scopes.Scope` exclude_scopes: Exclude targets which
        have at least one of these scopes on the classpath.
      :param :class:`pants.build_graph.target_scopes.Scope` include_scopes: Only include targets which
        have at least one of these scopes on the classpath. Defaults to Scopes.JVM_RUNTIME_SCOPES.
      :return: a list of classpath strings.