Ejemplo n.º 1
0
  @Override
  public ArtifactResult resolveArtifact(RepositorySystemSession session, ArtifactRequest request)
      throws ArtifactResolutionException {

    debugf("resolveArtifact %s", request);
    validateSession(session);

    // delegate has been wired up to come back to us, so this must be a real
    // implementation

    ArtifactResolutionException originalException = null;
    final Artifact artifact = request.getArtifact();

    // try FOSS local repo
    {
      try {
        final ArtifactRequest alternateRequest =
            new ArtifactRequest(
                    request.getArtifact(),
                    singletonList(fossRepository),
                    request.getRequestContext())
                .setDependencyNode(request.getDependencyNode())
                .setTrace(request.getTrace());

        final ArtifactResult result = artifactResolver.resolveArtifact(session, alternateRequest);

        // A successful result can contain exceptions
        // if (result.getExceptions().isEmpty()) {
        return result;
        // }
      } catch (ArtifactResolutionException e) {
        originalException = e;
      }
    }

    // try FOSS local repo with LATEST
    if (!artifact.getVersion().equals(LATEST_VERSION))
    //            throw new IllegalStateException("NYI: LATEST should not appear " +
    //                    "during resolveArtifact, should it?");
    {
      try {
        final Artifact alternateArtifact =
            new DefaultArtifact(
                artifact.getGroupId(),
                artifact.getArtifactId(),
                artifact.getClassifier(),
                artifact.getExtension(),
                LATEST_VERSION,
                artifact.getProperties(),
                artifact.getFile());

        final ArtifactRequest alternateRequest =
            new ArtifactRequest(
                    alternateArtifact,
                    Collections.singletonList(fossRepository),
                    request.getRequestContext())
                .setDependencyNode(request.getDependencyNode())
                .setTrace(request.getTrace());

        // setDependencyNode will override the artifact
        alternateRequest.setArtifact(alternateArtifact);

        final ArtifactResult result = artifactResolver.resolveArtifact(session, alternateRequest);

        // A successful result can contain exceptions
        // if (result.getExceptions().isEmpty()) {
        logger.warn(
            "Could not find artifact " + artifact + ", using LATEST " + result.getArtifact());
        return result;
        // }
      } catch (ArtifactResolutionException e) {
        logger.debug("LATEST resolution of " + artifact + " failed", e);
        if (originalException == null) {
          originalException = e;
        }
      }
    }

    // try JPP local repo
    if (useJpp) {
      // use maven as much as possible
      final RepositorySystemSession alternateSession = openJpp(session);
      try {
        final ArtifactRequest alternateRequest =
            new ArtifactRequest(
                    request.getArtifact(),
                    singletonList(fossRepository),
                    request.getRequestContext())
                .setDependencyNode(request.getDependencyNode())
                .setTrace(request.getTrace());

        final ArtifactResult result =
            artifactResolver.resolveArtifact(alternateSession, alternateRequest);

        // A successful result can contain exceptions
        // if (result.getExceptions().isEmpty()) {
        logger.warn(
            "Could not find artifact "
                + artifact
                + " in "
                + fossRepository
                + ", using JPP "
                + result.getArtifact());
        return result;
        // }
      } catch (ArtifactResolutionException e) {
        logger.debug("JPP resolution of " + artifact + " failed", e);
        if (originalException == null) {
          originalException = e;
        }
      }
    }

    if (originalException != null) {
      throw originalException;
    }

    throw new RuntimeException(
        "NYI: org.fedoraproject.maven.repository.internal."
            + "FossRepositorySystem.resolveArtifact");
  }