Example usage for org.apache.maven.model.building ModelProblem getException

List of usage examples for org.apache.maven.model.building ModelProblem getException

Introduction

In this page you can find the example usage for org.apache.maven.model.building ModelProblem getException.

Prototype

Exception getException();

Source Link

Document

Gets the exception that caused this problem (if any).

Usage

From source file:org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryStorage.java

License:Apache License

@Override
public ProjectVersionMetadata readProjectVersionMetadata(ReadMetadataRequest readMetadataRequest)
        throws RepositoryStorageMetadataNotFoundException, RepositoryStorageMetadataInvalidException,
        RepositoryStorageRuntimeException {
    try {//from  ww w .  j  a v a  2s  . c om
        ManagedRepository managedRepository = managedRepositoryAdmin
                .getManagedRepository(readMetadataRequest.getRepositoryId());
        String artifactVersion = readMetadataRequest.getProjectVersion();
        // olamy: in case of browsing via the ui we can mix repos (parent of a SNAPSHOT can come from release repo)
        if (!readMetadataRequest.isBrowsingRequest()) {
            if (VersionUtil.isSnapshot(artifactVersion)) {
                // skygo trying to improve speed by honoring managed configuration MRM-1658
                if (managedRepository.isReleases() && !managedRepository.isSnapshots()) {
                    throw new RepositoryStorageRuntimeException("lookforsnaponreleaseonly",
                            "managed repo is configured for release only");
                }
            } else {
                if (!managedRepository.isReleases() && managedRepository.isSnapshots()) {
                    throw new RepositoryStorageRuntimeException("lookforsreleaseonsneponly",
                            "managed repo is configured for snapshot only");
                }
            }
        }
        File basedir = new File(managedRepository.getLocation());
        if (VersionUtil.isSnapshot(artifactVersion)) {
            File metadataFile = pathTranslator.toFile(basedir, readMetadataRequest.getNamespace(),
                    readMetadataRequest.getProjectId(), artifactVersion, METADATA_FILENAME);
            try {
                ArchivaRepositoryMetadata metadata = MavenMetadataReader.read(metadataFile);

                // re-adjust to timestamp if present, otherwise retain the original -SNAPSHOT filename
                SnapshotVersion snapshotVersion = metadata.getSnapshotVersion();
                if (snapshotVersion != null) {
                    artifactVersion = artifactVersion.substring(0, artifactVersion.length() - 8); // remove SNAPSHOT from end
                    artifactVersion = artifactVersion + snapshotVersion.getTimestamp() + "-"
                            + snapshotVersion.getBuildNumber();
                }
            } catch (XMLException e) {
                // unable to parse metadata - LOGGER it, and continue with the version as the original SNAPSHOT version
                LOGGER.warn("Invalid metadata: {} - {}", metadataFile, e.getMessage());
            }
        }

        // TODO: won't work well with some other layouts, might need to convert artifact parts to ID by path translator
        String id = readMetadataRequest.getProjectId() + "-" + artifactVersion + ".pom";
        File file = pathTranslator.toFile(basedir, readMetadataRequest.getNamespace(),
                readMetadataRequest.getProjectId(), readMetadataRequest.getProjectVersion(), id);

        if (!file.exists()) {
            // metadata could not be resolved
            throw new RepositoryStorageMetadataNotFoundException(
                    "The artifact's POM file '" + file.getAbsolutePath() + "' was missing");
        }

        // TODO: this is a workaround until we can properly resolve using proxies as well - this doesn't cache
        //       anything locally!
        List<RemoteRepository> remoteRepositories = new ArrayList<>();
        Map<String, NetworkProxy> networkProxies = new HashMap<>();

        Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyConnectorAdmin.getProxyConnectorAsMap();
        List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get(readMetadataRequest.getRepositoryId());
        if (proxyConnectors != null) {
            for (ProxyConnector proxyConnector : proxyConnectors) {
                RemoteRepository remoteRepoConfig = remoteRepositoryAdmin
                        .getRemoteRepository(proxyConnector.getTargetRepoId());

                if (remoteRepoConfig != null) {
                    remoteRepositories.add(remoteRepoConfig);

                    NetworkProxy networkProxyConfig = networkProxyAdmin
                            .getNetworkProxy(proxyConnector.getProxyId());

                    if (networkProxyConfig != null) {
                        // key/value: remote repo ID/proxy info
                        networkProxies.put(proxyConnector.getTargetRepoId(), networkProxyConfig);
                    }
                }
            }
        }

        // That's a browsing request so we can a mix of SNAPSHOT and release artifacts (especially with snapshots which
        // can have released parent pom
        if (readMetadataRequest.isBrowsingRequest()) {
            remoteRepositories.addAll(remoteRepositoryAdmin.getRemoteRepositories());
        }

        ModelBuildingRequest req = new DefaultModelBuildingRequest().setProcessPlugins(false).setPomFile(file)
                .setTwoPhaseBuilding(false).setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);

        //MRM-1607. olamy this will resolve jdk profiles on the current running archiva jvm
        req.setSystemProperties(System.getProperties());

        // MRM-1411
        req.setModelResolver(new RepositoryModelResolver(managedRepository, pathTranslator, wagonFactory,
                remoteRepositories, networkProxies, managedRepository));

        Model model;
        try {
            model = builder.build(req).getEffectiveModel();
        } catch (ModelBuildingException e) {
            String msg = "The artifact's POM file '" + file + "' was invalid: " + e.getMessage();

            List<ModelProblem> modelProblems = e.getProblems();
            for (ModelProblem problem : modelProblems) {
                // MRM-1411, related to MRM-1335
                // this means that the problem was that the parent wasn't resolved!
                // olamy really hackhish but fail with java profile so use error message
                // || ( StringUtils.startsWith( problem.getMessage(), "Failed to determine Java version for profile" ) )
                // but setTwoPhaseBuilding(true) fix that
                if ((problem.getException() instanceof FileNotFoundException && e.getModelId() != null
                        && !e.getModelId().equals(problem.getModelId()))) {
                    LOGGER.warn("The artifact's parent POM file '{}' cannot be resolved. "
                            + "Using defaults for project version metadata..", file);

                    ProjectVersionMetadata metadata = new ProjectVersionMetadata();
                    metadata.setId(readMetadataRequest.getProjectVersion());

                    MavenProjectFacet facet = new MavenProjectFacet();
                    facet.setGroupId(readMetadataRequest.getNamespace());
                    facet.setArtifactId(readMetadataRequest.getProjectId());
                    facet.setPackaging("jar");
                    metadata.addFacet(facet);

                    String errMsg = "Error in resolving artifact's parent POM file. "
                            + (problem.getException() == null ? problem.getMessage()
                                    : problem.getException().getMessage());
                    RepositoryProblemFacet repoProblemFacet = new RepositoryProblemFacet();
                    repoProblemFacet.setRepositoryId(readMetadataRequest.getRepositoryId());
                    repoProblemFacet.setId(readMetadataRequest.getRepositoryId());
                    repoProblemFacet.setMessage(errMsg);
                    repoProblemFacet.setProblem(errMsg);
                    repoProblemFacet.setProject(readMetadataRequest.getProjectId());
                    repoProblemFacet.setVersion(readMetadataRequest.getProjectVersion());
                    repoProblemFacet.setNamespace(readMetadataRequest.getNamespace());

                    metadata.addFacet(repoProblemFacet);

                    return metadata;
                }
            }

            throw new RepositoryStorageMetadataInvalidException("invalid-pom", msg, e);
        }

        // Check if the POM is in the correct location
        boolean correctGroupId = readMetadataRequest.getNamespace().equals(model.getGroupId());
        boolean correctArtifactId = readMetadataRequest.getProjectId().equals(model.getArtifactId());
        boolean correctVersion = readMetadataRequest.getProjectVersion().equals(model.getVersion());
        if (!correctGroupId || !correctArtifactId || !correctVersion) {
            StringBuilder message = new StringBuilder("Incorrect POM coordinates in '" + file + "':");
            if (!correctGroupId) {
                message.append("\nIncorrect group ID: ").append(model.getGroupId());
            }
            if (!correctArtifactId) {
                message.append("\nIncorrect artifact ID: ").append(model.getArtifactId());
            }
            if (!correctVersion) {
                message.append("\nIncorrect version: ").append(model.getVersion());
            }

            throw new RepositoryStorageMetadataInvalidException("mislocated-pom", message.toString());
        }

        ProjectVersionMetadata metadata = new ProjectVersionMetadata();
        metadata.setCiManagement(convertCiManagement(model.getCiManagement()));
        metadata.setDescription(model.getDescription());
        metadata.setId(readMetadataRequest.getProjectVersion());
        metadata.setIssueManagement(convertIssueManagement(model.getIssueManagement()));
        metadata.setLicenses(convertLicenses(model.getLicenses()));
        metadata.setMailingLists(convertMailingLists(model.getMailingLists()));
        metadata.setDependencies(convertDependencies(model.getDependencies()));
        metadata.setName(model.getName());
        metadata.setOrganization(convertOrganization(model.getOrganization()));
        metadata.setScm(convertScm(model.getScm()));
        metadata.setUrl(model.getUrl());
        metadata.setProperties(model.getProperties());

        MavenProjectFacet facet = new MavenProjectFacet();
        facet.setGroupId(model.getGroupId() != null ? model.getGroupId() : model.getParent().getGroupId());
        facet.setArtifactId(model.getArtifactId());
        facet.setPackaging(model.getPackaging());
        if (model.getParent() != null) {
            MavenProjectParent parent = new MavenProjectParent();
            parent.setGroupId(model.getParent().getGroupId());
            parent.setArtifactId(model.getParent().getArtifactId());
            parent.setVersion(model.getParent().getVersion());
            facet.setParent(parent);
        }
        metadata.addFacet(facet);

        return metadata;
    } catch (RepositoryAdminException e) {
        throw new RepositoryStorageRuntimeException("repo-admin", e.getMessage(), e);
    }
}

From source file:org.commonjava.emb.project.ProjectLoader.java

License:Apache License

public List<MavenProject> buildReactorProjectInstances(final ProjectToolsSession session,
        final File... rootPoms) throws ProjectToolsException {
    final ProjectBuildingRequest pbr = sessionInjector.getProjectBuildingRequest(session);

    try {//from w ww.  j a va2s  .c o m
        final List<File> pomFiles = Arrays.asList(rootPoms);
        final List<ProjectBuildingResult> results = projectBuilder.build(pomFiles, true, pbr);

        final List<MavenProject> projects = new ArrayList<MavenProject>(results.size());
        for (final ProjectBuildingResult result : results) {
            final MavenProject project = result.getProject();
            project.setRemoteArtifactRepositories(session.getRemoteArtifactRepositories());

            projects.add(project);
        }

        session.setReactorProjects(projects);

        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug(
                    "Adding projects to dependency graph:\n\t" + StringUtils.join(projects.iterator(), "\n\t"));
        }
        addProjects(session, projects);

        return projects;
    } catch (final ProjectBuildingException e) {
        // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
        // );
        final List<ProjectBuildingResult> results = e.getResults();

        final StringBuilder sb = new StringBuilder();

        if (results == null) {
            sb.append("Cannot build reactor project instances for root-POM: ").append(rootPoms);

            final StringWriter sWriter = new StringWriter();
            final PrintWriter pWriter = new PrintWriter(sWriter);

            e.printStackTrace(pWriter);
            sb.append("\n").append(sWriter);
        } else {
            int i = 0;
            for (final ProjectBuildingResult result : results) {
                final List<ModelProblem> problems = result.getProblems();
                if (problems != null && !problems.isEmpty()) {
                    sb.append("\n").append(result.getProjectId());
                    for (final ModelProblem problem : problems) {
                        sb.append("\n\t").append(problem.getMessage()).append("\n\t\t")
                                .append(problem.getSource()).append("@").append(problem.getLineNumber())
                                .append(":" + problem.getColumnNumber());

                        if (problem.getException() != null) {
                            final StringWriter sWriter = new StringWriter();
                            final PrintWriter pWriter = new PrintWriter(sWriter);

                            problem.getException().printStackTrace(pWriter);
                            sb.append("\n").append(sWriter);
                        }

                        sb.append((++i)).append(" ").append(sb);
                    }
                }
            }
        }

        throw new ProjectToolsException("Failed to build project instance. \n\n%s", e, sb);
    }
}

From source file:org.commonjava.emb.project.ProjectLoader.java

License:Apache License

public MavenProject buildProjectInstance(final File pomFile, final ProjectToolsSession session)
        throws ProjectToolsException {
    final ProjectBuildingRequest pbr = sessionInjector.getProjectBuildingRequest(session);

    try {/*  ww w.ja  v  a 2 s.c  om*/
        final ProjectBuildingResult result = projectBuilder.build(pomFile, pbr);

        final MavenProject project = result.getProject();
        project.setRemoteArtifactRepositories(session.getRemoteArtifactRepositories());

        addProjects(session, project);

        return project;
    } catch (final ProjectBuildingException e) {
        // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
        // );
        final List<ProjectBuildingResult> results = e.getResults();

        final StringBuilder sb = new StringBuilder();

        if (results == null) {
            sb.append("Cannot build project instance for: ").append(pomFile);

            final StringWriter sWriter = new StringWriter();
            final PrintWriter pWriter = new PrintWriter(sWriter);

            e.printStackTrace(pWriter);
            sb.append("\n").append(sWriter);
        } else {
            int i = 0;
            for (final ProjectBuildingResult result : results) {
                final List<ModelProblem> problems = result.getProblems();
                for (final ModelProblem problem : problems) {
                    sb.append(problem.getMessage()).append("\n\t").append(problem.getSource()).append("@")
                            .append(problem.getLineNumber()).append(":" + problem.getColumnNumber());

                    if (problem.getException() != null) {
                        final StringWriter sWriter = new StringWriter();
                        final PrintWriter pWriter = new PrintWriter(sWriter);

                        problem.getException().printStackTrace(pWriter);
                        sb.append("\n").append(sWriter);
                    }

                    sb.append((++i)).append(" ").append(sb);
                }
            }
        }

        throw new ProjectToolsException("Failed to build project instance. \n\n%s", e, sb);
    }
}

From source file:org.commonjava.emb.project.ProjectLoader.java

License:Apache License

public MavenProject buildProjectInstance(final String groupId, final String artifactId, final String version,
        final ProjectToolsSession session) throws ProjectToolsException {
    final ProjectBuildingRequest req = sessionInjector.getProjectBuildingRequest(session);

    try {/*from  ww  w .  ja  va  2  s  .c  om*/
        final org.apache.maven.artifact.Artifact pomArtifact = mavenRepositorySystem.createArtifact(groupId,
                artifactId, version, "pom");

        final Artifact aetherPomArtifact = RepositoryUtils.toArtifact(pomArtifact);

        final ArtifactRequest artifactRequest = new ArtifactRequest(aetherPomArtifact,
                sessionInjector.getRemoteRepositories(session), "project");

        final ArtifactResult artifactResult = aetherRepositorySystem.resolveArtifact(req.getRepositorySession(),
                artifactRequest);

        final File pomFile = artifactResult.getArtifact().getFile();
        final ProjectBuildingResult result = projectBuilder.build(pomFile, req);

        final MavenProject project = result.getProject();
        project.setRemoteArtifactRepositories(session.getRemoteArtifactRepositories());

        project.setFile(pomFile);

        addProjects(session, project);

        return project;
    } catch (final ProjectBuildingException e) {
        // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
        // );
        final List<ProjectBuildingResult> results = e.getResults();

        final StringBuilder sb = new StringBuilder();

        int i = 0;
        if (results == null) {
            sb.append("Cannot build project instance for: ").append(groupId).append(':').append(artifactId)
                    .append(':').append(version);

            final StringWriter sWriter = new StringWriter();
            final PrintWriter pWriter = new PrintWriter(sWriter);

            e.printStackTrace(pWriter);
            sb.append("\n").append(sWriter);
        } else {
            for (final ProjectBuildingResult result : results) {
                final List<ModelProblem> problems = result.getProblems();
                for (final ModelProblem problem : problems) {
                    sb.append(problem.getMessage()).append("\n\t").append(problem.getSource()).append("@")
                            .append(problem.getLineNumber()).append(":" + problem.getColumnNumber());

                    if (problem.getException() != null) {
                        final StringWriter sWriter = new StringWriter();
                        final PrintWriter pWriter = new PrintWriter(sWriter);

                        problem.getException().printStackTrace(pWriter);
                        sb.append("\n").append(sWriter);
                    }

                    sb.append((++i)).append(" ").append(sb);
                }
            }
        }

        throw new ProjectToolsException("Failed to build project instance. \n\n%s", e, sb);
    } catch (final ArtifactResolutionException e) {
        throw new ProjectToolsException("Failed to resolve POM: %s:%s:%s\nReason: %s", e, groupId, artifactId,
                version, e.getMessage());
    }
}