mirror of https://github.com/apache/archiva.git
[MRM-127] add support for archetypes
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@425943 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
25eac2b1f8
commit
60eaf42859
|
@ -18,8 +18,6 @@ package org.apache.maven.repository.indexing.record;
|
||||||
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||||
import org.apache.maven.artifact.repository.metadata.Metadata;
|
|
||||||
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
|
|
||||||
import org.apache.maven.model.Model;
|
import org.apache.maven.model.Model;
|
||||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||||
import org.apache.maven.repository.digest.Digester;
|
import org.apache.maven.repository.digest.Digester;
|
||||||
|
@ -68,6 +66,8 @@ public class StandardArtifactIndexRecordFactory
|
||||||
|
|
||||||
private static final String PLUGIN_METADATA_NAME = "META-INF/maven/plugin.xml";
|
private static final String PLUGIN_METADATA_NAME = "META-INF/maven/plugin.xml";
|
||||||
|
|
||||||
|
private static final String ARCHETYPE_METADATA_NAME = "META-INF/maven/archetype.xml";
|
||||||
|
|
||||||
public RepositoryIndexRecord createRecord( Artifact artifact )
|
public RepositoryIndexRecord createRecord( Artifact artifact )
|
||||||
throws RepositoryIndexException
|
throws RepositoryIndexException
|
||||||
{
|
{
|
||||||
|
@ -177,35 +177,6 @@ public class StandardArtifactIndexRecordFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Metadata readMetadata( File file )
|
|
||||||
throws RepositoryIndexException
|
|
||||||
{
|
|
||||||
MetadataXpp3Reader r = new MetadataXpp3Reader();
|
|
||||||
|
|
||||||
FileReader reader = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
reader = new FileReader( file );
|
|
||||||
return r.read( reader );
|
|
||||||
}
|
|
||||||
catch ( FileNotFoundException e )
|
|
||||||
{
|
|
||||||
throw new RepositoryIndexException( "Unable to find requested metadata: " + e.getMessage(), e );
|
|
||||||
}
|
|
||||||
catch ( IOException e )
|
|
||||||
{
|
|
||||||
throw new RepositoryIndexException( "Unable to read metadata: " + e.getMessage(), e );
|
|
||||||
}
|
|
||||||
catch ( XmlPullParserException xe )
|
|
||||||
{
|
|
||||||
throw new RepositoryIndexException( "Unable to parse metadata: " + xe.getMessage(), xe );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
IOUtil.close( reader );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void populateArchiveEntries( List files, StandardArtifactIndexRecord record, File artifactFile )
|
private void populateArchiveEntries( List files, StandardArtifactIndexRecord record, File artifactFile )
|
||||||
throws RepositoryIndexException
|
throws RepositoryIndexException
|
||||||
{
|
{
|
||||||
|
@ -225,21 +196,34 @@ public class StandardArtifactIndexRecordFactory
|
||||||
{
|
{
|
||||||
classes.append( name.substring( 0, name.length() - 6 ).replace( '/', '.' ) ).append( "\n" );
|
classes.append( name.substring( 0, name.length() - 6 ).replace( '/', '.' ) ).append( "\n" );
|
||||||
}
|
}
|
||||||
else
|
else if ( PLUGIN_METADATA_NAME.equals( name ) )
|
||||||
{
|
{
|
||||||
if ( PLUGIN_METADATA_NAME.equals( name ) )
|
populatePluginEntries( readXmlMetadataFileInJar( artifactFile, PLUGIN_METADATA_NAME ), record );
|
||||||
{
|
|
||||||
populatePluginEntries( readPluginMetadata( artifactFile ), record );
|
|
||||||
}
|
}
|
||||||
|
else if ( ARCHETYPE_METADATA_NAME.equals( name ) )
|
||||||
|
{
|
||||||
|
populateArchetypeEntries( record );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( classes.length() > 0 )
|
||||||
|
{
|
||||||
record.setClasses( classes.toString() );
|
record.setClasses( classes.toString() );
|
||||||
|
}
|
||||||
|
if ( fileBuffer.length() > 0 )
|
||||||
|
{
|
||||||
record.setFiles( fileBuffer.toString() );
|
record.setFiles( fileBuffer.toString() );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Xpp3Dom readPluginMetadata( File file )
|
private void populateArchetypeEntries( StandardArtifactIndexRecord record )
|
||||||
|
{
|
||||||
|
// Typically discovered as a JAR
|
||||||
|
record.setType( "maven-archetype" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private Xpp3Dom readXmlMetadataFileInJar( File file, String name )
|
||||||
throws RepositoryIndexException
|
throws RepositoryIndexException
|
||||||
{
|
{
|
||||||
// TODO: would be more efficient with original ZipEntry still around
|
// TODO: would be more efficient with original ZipEntry still around
|
||||||
|
@ -249,7 +233,7 @@ public class StandardArtifactIndexRecordFactory
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
zipFile = new ZipFile( file );
|
zipFile = new ZipFile( file );
|
||||||
ZipEntry entry = zipFile.getEntry( PLUGIN_METADATA_NAME );
|
ZipEntry entry = zipFile.getEntry( name );
|
||||||
xpp3Dom = Xpp3DomBuilder.build( new InputStreamReader( zipFile.getInputStream( entry ) ) );
|
xpp3Dom = Xpp3DomBuilder.build( new InputStreamReader( zipFile.getInputStream( entry ) ) );
|
||||||
}
|
}
|
||||||
catch ( ZipException e )
|
catch ( ZipException e )
|
||||||
|
|
|
@ -169,6 +169,35 @@ public class StandardArtifactIndexRecordFactoryTest
|
||||||
assertEquals( "check record", expectedRecord, record );
|
assertEquals( "check record", expectedRecord, record );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIndexedArchetype()
|
||||||
|
throws RepositoryIndexException, IOException, XmlPullParserException
|
||||||
|
{
|
||||||
|
Artifact artifact = createArtifact( "test-archetype" );
|
||||||
|
|
||||||
|
RepositoryIndexRecord record = factory.createRecord( artifact );
|
||||||
|
|
||||||
|
StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
|
||||||
|
expectedRecord.setMd5Checksum( "ecefd4674c75a175119572b19edc45f1" );
|
||||||
|
expectedRecord.setFilename( repository.pathOf( artifact ) );
|
||||||
|
expectedRecord.setLastModified( artifact.getFile().lastModified() );
|
||||||
|
expectedRecord.setSize( artifact.getFile().length() );
|
||||||
|
expectedRecord.setArtifactId( "test-archetype" );
|
||||||
|
expectedRecord.setGroupId( TEST_GROUP_ID );
|
||||||
|
expectedRecord.setVersion( "1.0" );
|
||||||
|
expectedRecord.setSha1Checksum( "5ebabafdbcd6684ae434c06e22c32844df284b05" );
|
||||||
|
expectedRecord.setType( "maven-archetype" );
|
||||||
|
expectedRecord.setRepository( "test" );
|
||||||
|
expectedRecord.setFiles( "META-INF/MANIFEST.MF\n" + "archetype-resources/pom.xml\n" +
|
||||||
|
"archetype-resources/src/main/java/App.java\n" + "archetype-resources/src/test/java/AppTest.java\n" +
|
||||||
|
"META-INF/maven/archetype.xml\n" +
|
||||||
|
"META-INF/maven/org.apache.maven.repository.record/test-archetype/pom.xml\n" +
|
||||||
|
"META-INF/maven/org.apache.maven.repository.record/test-archetype/pom.properties\n" );
|
||||||
|
expectedRecord.setPackaging( "jar" );
|
||||||
|
expectedRecord.setProjectName( "Archetype - test-archetype" );
|
||||||
|
|
||||||
|
assertEquals( "check record", expectedRecord, record );
|
||||||
|
}
|
||||||
|
|
||||||
public void testCorruptJar()
|
public void testCorruptJar()
|
||||||
throws RepositoryIndexException
|
throws RepositoryIndexException
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,8 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.apache.maven.repository.record</groupId>
|
||||||
|
<artifactId>test-archetype</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<name>Archetype - test-archetype</name>
|
||||||
|
</project>
|
Loading…
Reference in New Issue