# File lib/buildr/packaging/artifact_namespace.rb, line 604
    def need(*specs)
      named = specs.flatten.inject({}) do |seen, spec|
        if Hash === spec && (spec.keys & ActsAsArtifact::ARTIFACT_ATTRIBUTES).empty?
          spec.each_pair do |name, spec|
            if Array === spec # a group
              seen[name] ||= spec.map { |s| ArtifactRequirement.new(s) }
            else
              artifact = ArtifactRequirement.new(spec)
              artifact.name = name
              seen[artifact.name] ||= artifact
            end
          end
        else
          artifact = ArtifactRequirement.new(spec)
          seen[artifact.name] ||= artifact
        end
        seen
      end
      named.each_pair do |name, artifact|
        if Array === artifact # a group
          artifact.each do |a|
            unvers = a.unversioned_spec
            previous = registry[unvers]
            if previous && previous.selected? && a.satisfied_by?(previous)
              a.version = previous.version
            end
            registry[unvers] = a
          end
          group(name, *(artifact.map { |a| a.unversioned_spec } + [{:namespace => self}]))
        else
          unvers = artifact.unversioned_spec
          previous = registry.get(unvers, true)
          if previous && previous.selected? && artifact.satisfied_by?(previous)
            artifact.version = previous.version
            artifact.selected!
          end
          registry[unvers] = artifact
          registry.alias name, unvers unless name.to_s[/^\s*$/]
        end
      end
      self
    end