[ARCHETYPE-438] Remove support for specifying catalogs through direct URLs
Project: http://git-wip-us.apache.org/repos/asf/maven-archetype/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-archetype/commit/93318023 Tree: http://git-wip-us.apache.org/repos/asf/maven-archetype/tree/93318023 Diff: http://git-wip-us.apache.org/repos/asf/maven-archetype/diff/93318023 Branch: refs/heads/master Commit: 93318023353fd1a90f9a0b554dffd90f6de0cb56 Parents: 4b2d005 Author: rfscholte <rfscho...@apache.org> Authored: Sat Jan 28 13:45:41 2017 +0100 Committer: rfscholte <rfscho...@apache.org> Committed: Sat Jan 28 13:45:41 2017 +0100 ---------------------------------------------------------------------- .../maven/archetype/ArchetypeManager.java | 10 ---- .../archetype/DefaultArchetypeManager.java | 15 +---- .../archetype/source/ArchetypeDataSource.java | 4 +- .../InternalCatalogArchetypeDataSource.java | 3 +- .../source/LocalCatalogArchetypeDataSource.java | 5 +- .../RemoteCatalogArchetypeDataSource.java | 58 +++++++++----------- .../RemoteCatalogArchetypeDataSourceTest.java | 8 ++- .../mojos/CreateProjectFromArchetypeMojo.java | 3 - .../ui/generation/DefaultArchetypeSelector.java | 21 ++----- 9 files changed, 46 insertions(+), 81 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java index fea2d1a..60a7af2 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java @@ -77,16 +77,6 @@ public interface ArchetypeManager ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest ); /** - * Gives the catalog of archetypes located at the given url. - * if the url doesn't define a catalog, then <code>'archetype-catalog.xml'</code> is appended to it for search. - * @param buildingRequest TODO - * @param url the catalog url or base url containing the catalog file. - * - * @return the catalog. - */ - ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest, String url ); - - /** * Creates a jar file for an archetype. * * @param archetypeDirectory http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java index 301b8af..5ad3e78 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java @@ -37,7 +37,6 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; -import java.util.Properties; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -172,7 +171,7 @@ public class DefaultArchetypeManager { ArchetypeDataSource source = archetypeSources.get( "internal-catalog" ); - return source.getArchetypeCatalog( null, new Properties() ); + return source.getArchetypeCatalog( null ); } catch ( ArchetypeDataSourceException e ) { @@ -184,10 +183,9 @@ public class DefaultArchetypeManager { try { - Properties properties = new Properties(); ArchetypeDataSource source = archetypeSources.get( "catalog" ); - return source.getArchetypeCatalog( buildingRequest, properties ); + return source.getArchetypeCatalog( buildingRequest ); } catch ( ArchetypeDataSourceException e ) { @@ -197,18 +195,11 @@ public class DefaultArchetypeManager public ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest ) { - return getRemoteCatalog( buildingRequest, "http://repo.maven.apache.org/maven2" ); - } - - public ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest, String url ) - { try { - Properties properties = new Properties(); - properties.setProperty( "repository", url ); ArchetypeDataSource source = archetypeSources.get( "remote-catalog" ); - return source.getArchetypeCatalog( buildingRequest, properties ); + return source.getArchetypeCatalog( buildingRequest ); } catch ( ArchetypeDataSourceException e ) { http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java index 05b416f..0986157 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java @@ -23,8 +23,6 @@ import org.apache.maven.archetype.catalog.Archetype; import org.apache.maven.archetype.catalog.ArchetypeCatalog; import org.apache.maven.project.ProjectBuildingRequest; -import java.util.Properties; - /** * Sources we can get Archetypes from. This may be the local registry, a Wiki, or, * a Maven Repository application. We might also want to get all the Archetypes based @@ -38,7 +36,7 @@ public interface ArchetypeDataSource { String ARCHETYPE_CATALOG_FILENAME = "archetype-catalog.xml"; - ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest, Properties properties ) + ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest ) throws ArchetypeDataSourceException; void updateCatalog( ProjectBuildingRequest buildingRequest, Archetype archetype ) http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java index 62ce96a..f7f617d 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java @@ -28,7 +28,6 @@ import org.codehaus.plexus.util.ReaderFactory; import java.io.IOException; import java.io.InputStream; import java.io.Reader; -import java.util.Properties; /** * @author Jason van Zyl @@ -38,7 +37,7 @@ public class InternalCatalogArchetypeDataSource extends CatalogArchetypeDataSource { - public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest, Properties properties ) + public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest ) throws ArchetypeDataSourceException { try http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java index 8bb2d48..5cbddf6 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; -import java.util.Properties; import org.apache.maven.archetype.catalog.Archetype; import org.apache.maven.archetype.catalog.ArchetypeCatalog; @@ -79,7 +78,7 @@ public class LocalCatalogArchetypeDataSource Archetype newArchetype = archetype; while ( !found && archetypes.hasNext() ) { - Archetype a = (Archetype) archetypes.next(); + Archetype a = archetypes.next(); if ( a.getGroupId().equals( archetype.getGroupId() ) && a.getArtifactId().equals( archetype.getArtifactId() ) ) { @@ -101,7 +100,7 @@ public class LocalCatalogArchetypeDataSource writeLocalCatalog( catalog, catalogFile ); } - public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest, Properties properties ) + public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest ) throws ArchetypeDataSourceException { File localRepo = repositoryManager.getLocalRepositoryBasedir( buildingRequest ); http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java index beda9a4..f10f4a5 100644 --- a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java +++ b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java @@ -23,10 +23,10 @@ import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Properties; import org.apache.maven.archetype.catalog.Archetype; import org.apache.maven.archetype.catalog.ArchetypeCatalog; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.LegacySupport; @@ -61,8 +61,6 @@ public class RemoteCatalogArchetypeDataSource extends CatalogArchetypeDataSource @Requirement private SettingsDecrypter settingsDecrypter; - public static final String REPOSITORY_PROPERTY = "repository"; - /** * Id of the repository used to download catalog file. Proxy or authentication info can * be setup in settings.xml. @@ -70,44 +68,40 @@ public class RemoteCatalogArchetypeDataSource extends CatalogArchetypeDataSource public static final String REPOSITORY_ID = "archetype"; @Override - public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest, Properties properties ) + public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest buildingRequest ) throws ArchetypeDataSourceException { - String repository = properties.getProperty( REPOSITORY_PROPERTY ); - - if ( repository == null ) + ArtifactRepository centralRepository = null; + ArtifactRepository archetypeRepository = null; + for ( ArtifactRepository remoteRepository : buildingRequest.getRemoteRepositories() ) { - throw new ArchetypeDataSourceException( "To use the remote catalog you must specify the 'repository'" - + " property with an URL." ); + if ( REPOSITORY_ID.equals( remoteRepository.getId() ) ) + { + archetypeRepository = remoteRepository; + break; + } + else if ( "central".equals( remoteRepository.getId() ) ) + { + centralRepository = remoteRepository; + } } - if ( repository.endsWith( "/" ) ) + if ( archetypeRepository == null ) { - repository = repository.substring( 0, repository.length() - 1 ); + archetypeRepository = centralRepository; } try { - return downloadCatalog( repository, ARCHETYPE_CATALOG_FILENAME ); + return downloadCatalog( archetypeRepository ); } - catch ( ArchetypeDataSourceException e ) + catch ( IOException e ) { - throw e; + throw new ArchetypeDataSourceException( e ); } - catch ( Exception e ) - { // When the default archetype catalog name doesn't work, we assume the repository is the URL to a file - String repositoryPath = repository.substring( 0, repository.lastIndexOf( "/" ) ); - String filename = repository.substring( repository.lastIndexOf( "/" ) + 1 ); - - try - { - return downloadCatalog( repositoryPath, filename ); - } - catch ( Exception ex ) - { - getLogger().warn( "Error reading archetype catalog " + repository, ex ); - return new ArchetypeCatalog(); - } + catch ( WagonException e ) + { + throw new ArchetypeDataSourceException( e ); } } @@ -117,13 +111,13 @@ public class RemoteCatalogArchetypeDataSource extends CatalogArchetypeDataSource throw new ArchetypeDataSourceException( "Not supported yet." ); } - private ArchetypeCatalog downloadCatalog( String repositoryPath, String filename ) + private ArchetypeCatalog downloadCatalog( ArtifactRepository repository ) throws WagonException, IOException, ArchetypeDataSourceException { - getLogger().debug( "Searching for remote catalog: " + repositoryPath + "/" + filename ); + getLogger().debug( "Searching for remote catalog: " + repository.getUrl() + "/" + ARCHETYPE_CATALOG_FILENAME ); // We use wagon to take advantage of a Proxy that has already been setup in a Maven environment. - Repository wagonRepository = new Repository( REPOSITORY_ID, repositoryPath ); + Repository wagonRepository = new Repository( repository.getId(), repository.getUrl() ); AuthenticationInfo authInfo = getAuthenticationInfo( wagonRepository.getId() ); ProxyInfo proxyInfo = getProxy( wagonRepository.getProtocol() ); @@ -134,7 +128,7 @@ public class RemoteCatalogArchetypeDataSource extends CatalogArchetypeDataSource try { wagon.connect( wagonRepository, authInfo, proxyInfo ); - wagon.get( filename, catalog ); + wagon.get( ARCHETYPE_CATALOG_FILENAME, catalog ); return readCatalog( ReaderFactory.newXmlReader( catalog ) ); } http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java ---------------------------------------------------------------------- diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java index f4e4a88..c6cc732 100644 --- a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java +++ b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java @@ -26,6 +26,8 @@ import org.apache.maven.archetype.ArchetypeManager; import org.apache.maven.archetype.catalog.Archetype; import org.apache.maven.archetype.catalog.ArchetypeCatalog; import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Writer; +import org.apache.maven.artifact.repository.MavenArtifactRepository; +import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.codehaus.plexus.PlexusTestCase; @@ -92,8 +94,12 @@ public class RemoteCatalogArchetypeDataSourceTest extends PlexusTestCase ArchetypeManager archetype = lookup( ArchetypeManager.class ); ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(); + buildingRequest.getRemoteRepositories().add( new MavenArtifactRepository( "central", + "http://localhost:" + port + "/repo/", + new DefaultRepositoryLayout(), null, + null ) ); - ArchetypeCatalog result = archetype.getRemoteCatalog( buildingRequest, "http://localhost:" + port + "/repo/" ); + ArchetypeCatalog result = archetype.getRemoteCatalog( buildingRequest ); assertEquals( 1, result.getArchetypes().size() ); assertEquals( "groupId", result.getArchetypes().get( 0 ).getGroupId() ); http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java ---------------------------------------------------------------------- diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java index 6ba7092..4a6b8e7 100644 --- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java +++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java @@ -100,14 +100,11 @@ public class CreateProjectFromArchetypeMojo * It is a comma separated list of catalogs. * Catalogs use the following schemes: * <ul> - * <li>'<code>file://...</code>' with <code>archetype-catalog.xml</code> automatically appended when pointing to a directory</li> - * <li>'<code>http://...</code>' or '<code>https://...</code>' with <code>archetype-catalog.xml</code> always appended</li> * <li>'<code>local</code>' which is the shortcut for '<code>file://~/.m2/archetype-catalog.xml</code>'</li> * <li>'<code>remote</code>' which is the shortcut for Maven Central repository, ie '<code>http://repo.maven.apache.org/maven2</code>'</li> * <li>'<code>internal</code>' which is an internal catalog</li> * </ul> * <p/> - * Since 2.0-alpha-5, default value is no longer <code>internal,local</code> but <code>remote,local</code>. * If Maven Central repository catalog file is empty, <code>internal</code> catalog is used instead. */ @Parameter( property = "archetypeCatalog", defaultValue = "remote,local" ) http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java ---------------------------------------------------------------------- diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java index 01ec947..c8bd6c6 100644 --- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java +++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java @@ -92,7 +92,7 @@ public class DefaultArchetypeSelector String catalogKey = found.getKey(); Archetype archetype = found.getValue(); - updateRepository( definition, archetype, catalogKey ); + updateRepository( definition, archetype ); getLogger().info( "Archetype repository not defined. Using the one from " + archetype + " found in catalog " + catalogKey ); @@ -118,7 +118,7 @@ public class DefaultArchetypeSelector String catalogKey = found.getKey(); Archetype archetype = found.getValue(); - updateDefinition( definition, archetype, catalogKey ); + updateDefinition( definition, archetype ); getLogger().info( "Archetype " + archetype + " found in catalog " + catalogKey ); } @@ -159,9 +159,7 @@ public class DefaultArchetypeSelector { Archetype selectedArchetype = archetypeSelectionQueryer.selectArchetype( archetypes, definition ); - String catalogKey = getCatalogKey( archetypes, selectedArchetype ); - - updateDefinition( definition, selectedArchetype, catalogKey ); + updateDefinition( definition, selectedArchetype ); } // Make sure the groupId and artifactId are valid, the version may just default to @@ -222,29 +220,22 @@ public class DefaultArchetypeSelector return archetypes; } - private void updateRepository( ArchetypeDefinition definition, Archetype archetype, String catalogKey ) + private void updateRepository( ArchetypeDefinition definition, Archetype archetype ) { String repository = archetype.getRepository(); if ( StringUtils.isNotEmpty( repository ) ) { definition.setRepository( repository ); } - else if ( catalogKey.indexOf( ':' ) > 1 ) - { - // file: or http: - int lastIndex = catalogKey.lastIndexOf( '/' ); - String catalogBase = catalogKey.substring( 0, ( lastIndex > 7 ? lastIndex : catalogKey.length() ) ); - definition.setRepository( catalogBase ); - } } - private void updateDefinition( ArchetypeDefinition definition, Archetype archetype, String catalogKey ) + private void updateDefinition( ArchetypeDefinition definition, Archetype archetype ) { definition.setGroupId( archetype.getGroupId() ); definition.setArtifactId( archetype.getArtifactId() ); definition.setVersion( archetype.getVersion() ); definition.setName( archetype.getArtifactId() ); - updateRepository( definition, archetype, catalogKey ); + updateRepository( definition, archetype ); definition.setGoals( StringUtils.join( archetype.getGoals().iterator(), "," ) ); }