List of usage examples for org.apache.maven.artifact.repository.metadata RepositoryMetadata isSnapshot
boolean isSnapshot();
From source file:org.ck.maven.plugins.pom.versions.service.version.PomVersionRepositoryMetadataManager.java
License:Apache License
/** * ???/*w w w . j a v a 2 s. c om*/ * metadata ??? * remoteRepositories maven * localRepository maven */ public void resolve(RepositoryMetadata metadata, List remoteRepositories, ArtifactRepository localRepository) throws RepositoryMetadataResolutionException { this.getLogger().debug("use " + this.getClass().getName()); boolean alreadyResolved = alreadyResolved(metadata); if (!alreadyResolved) { for (Iterator i = remoteRepositories.iterator(); i.hasNext();) { ArtifactRepository repository = (ArtifactRepository) i.next(); ArtifactRepositoryPolicy policy = metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases(); if (!policy.isEnabled()) { getLogger().debug("Skipping disabled repository " + repository.getId()); } else if (repository.isBlacklisted()) { getLogger().debug("Skipping blacklisted repository " + repository.getId()); } else { File file = new File(localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata(metadata, repository)); boolean checkForUpdates = !file.exists() || policy.checkOutOfDate(new Date(file.lastModified())); if (checkForUpdates) { if (wagonManager.isOnline()) { getLogger() .debug(metadata.getKey() + ": checking for updates from " + repository.getId()); boolean storeMetadata = false; try { wagonManager.getArtifactMetadata(metadata, repository, file, policy.getChecksumPolicy()); storeMetadata = true; } catch (ResourceDoesNotExistException e) { getLogger().debug( metadata + " could not be found on repository: " + repository.getId()); // delete the local copy so the old details aren't used. if (file.exists()) { file.delete(); } storeMetadata = true; } catch (TransferFailedException e) { getLogger().warn(metadata + " could not be retrieved from repository: " + repository.getId() + " due to an error: " + e.getMessage()); getLogger().debug("Exception", e); getLogger().info("Repository '" + repository.getId() + "' will be blacklisted"); repository.setBlacklisted(true); // TODO: [jc; 08-Nov-2005] revisit this for 2.1 // suppressing logging to avoid logging this error twice. } if (storeMetadata) { // touch file so that this is not checked again until interval has passed if (file.exists()) { file.setLastModified(System.currentTimeMillis()); } else { //?? // this ensures that files are not continuously checked when they don't exist remotely // TODO: [jdcasey] If this happens as a result of ResourceDoesNotExistException, what effect will it have on subsequent runs? // Will the updateInterval come into play cleanly, or will this plug up the works?? try { metadata.storeInLocalRepository(localRepository, repository); } catch (RepositoryMetadataStoreException e) { throw new RepositoryMetadataResolutionException( "Unable to store local copy of metadata: " + e.getMessage(), e); } } } } else { getLogger().debug("System is offline. Cannot resolve metadata:\n" + metadata.extendedToString() + "\n\n"); } } } } // TODO: [jdcasey] what happens here when the system is offline, or there is a TransferFailedException // ...and no metadata file is written? cachedMetadata.add(metadata.getKey()); } try { mergeMetadata(metadata, remoteRepositories, localRepository); } catch (RepositoryMetadataStoreException e) { throw new RepositoryMetadataResolutionException( "Unable to store local copy of metadata: " + e.getMessage(), e); } catch (RepositoryMetadataReadException e) { throw new RepositoryMetadataResolutionException( "Unable to read local copy of metadata: " + e.getMessage(), e); } }
From source file:org.ck.maven.plugins.pom.versions.service.version.PomVersionRepositoryMetadataManager.java
License:Apache License
private void mergeMetadata(RepositoryMetadata metadata, List remoteRepositories, ArtifactRepository localRepository) throws RepositoryMetadataStoreException, RepositoryMetadataReadException { // TODO: currently this is first wins, but really we should take the latest by comparing either the // snapshot timestamp, or some other timestamp later encoded into the metadata. // TODO: this needs to be repeated here so the merging doesn't interfere with the written metadata // - we'd be much better having a pristine input, and an ongoing metadata for merging instead Map previousMetadata = new HashMap(); ArtifactRepository selected = null;//from www . ja va2 s. c om for (Iterator i = remoteRepositories.iterator(); i.hasNext();) { ArtifactRepository repository = (ArtifactRepository) i.next(); ArtifactRepositoryPolicy policy = metadata.isSnapshot() ? repository.getSnapshots() : repository.getReleases(); if (policy.isEnabled() && loadMetadata(metadata, repository, localRepository, previousMetadata)) { metadata.setRepository(repository); selected = repository; } } // if ( loadMetadata( metadata, localRepository, localRepository, previousMetadata ) ) // { // metadata.setRepository( null ); // selected = localRepository; // } updateSnapshotMetadata(metadata, previousMetadata, selected, localRepository); }
From source file:org.ck.maven.plugins.pom.versions.service.version.PomVersionRepositoryMetadataManager.java
License:Apache License
private void updateSnapshotMetadata(RepositoryMetadata metadata, Map previousMetadata, ArtifactRepository selected, ArtifactRepository localRepository) throws RepositoryMetadataStoreException { // TODO: this could be a lot nicer... should really be in the snapshot transformation? if (metadata.isSnapshot()) { Metadata prevMetadata = metadata.getMetadata(); for (Iterator i = previousMetadata.keySet().iterator(); i.hasNext();) { ArtifactRepository repository = (ArtifactRepository) i.next(); Metadata m = (Metadata) previousMetadata.get(repository); if (repository.equals(selected)) { if (m.getVersioning() == null) { m.setVersioning(new Versioning()); }/*from w w w . j av a 2 s . c o m*/ if (m.getVersioning().getSnapshot() == null) { m.getVersioning().setSnapshot(new Snapshot()); } /* if ( !m.getVersioning().getSnapshot().isLocalCopy() ) { // TODO: I think this is incorrect (it results in localCopy set in a remote profile). Probably // harmless so not removing at this point until full tests in place. m.getVersioning().getSnapshot().setLocalCopy( true ); metadata.setMetadata( m ); metadata.storeInLocalRepository( localRepository, repository ); } */ } else { if ((m.getVersioning() != null) && (m.getVersioning().getSnapshot() != null) && m.getVersioning().getSnapshot().isLocalCopy()) { m.getVersioning().getSnapshot().setLocalCopy(false); metadata.setMetadata(m); metadata.storeInLocalRepository(localRepository, repository); } } } metadata.setMetadata(prevMetadata); } }
From source file:org.ck.maven.plugins.pom.versions.service.version.PomVersionRepositoryMetadataManager.java
License:Apache License
private boolean loadMetadata(RepositoryMetadata repoMetadata, ArtifactRepository remoteRepository, ArtifactRepository localRepository, Map previousMetadata) throws RepositoryMetadataReadException { boolean setRepository = false; File metadataFile = new File(localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata(repoMetadata, remoteRepository)); if (metadataFile.exists()) { Metadata metadata = readMetadata(metadataFile); if (repoMetadata.isSnapshot() && (previousMetadata != null)) { previousMetadata.put(remoteRepository, metadata); }//from w ww. jav a 2s . c o m if (repoMetadata.getMetadata() != null) { setRepository = repoMetadata.getMetadata().merge(metadata); } else { repoMetadata.setMetadata(metadata); setRepository = true; } } return setRepository; }