List of usage examples for org.apache.maven.model.building ModelProblem getModelId
String getModelId();
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 w w w .java 2s.co m 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.eclipse.m2e.core.internal.markers.SourceLocationHelper.java
License:Open Source License
public static SourceLocation findLocation(IResource pomResource, ModelProblem modelProblem) { int lineNumber = Math.max(1, modelProblem.getLineNumber()); if (pomResource == null) { return new SourceLocation(lineNumber, 1, 1); }//from w w w.j ava2 s . c o m String pomFile = pomResource.getLocation().toOSString(); if (pomFile.equals(modelProblem.getSource())) { return new SourceLocation(lineNumber, 1, 1); } int columnNumber = Math.max(1, modelProblem.getColumnNumber()); SourceLocation causeLocation = new SourceLocation(modelProblem.getSource(), modelProblem.getModelId(), lineNumber, 1, columnNumber - COLUMN_END_OFFSET); return new SourceLocation(1, 1, 1, causeLocation); }