import org.apache.maven.artifact.Artifact;
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.io.xpp3.MavenXpp3Reader;
import org.apache.maven.repository.digest.Digester;
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 )
throws RepositoryIndexException
{
}
}
- 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 )
throws RepositoryIndexException
{
{
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( readPluginMetadata( artifactFile ), record );
- }
+ populatePluginEntries( readXmlMetadataFileInJar( artifactFile, PLUGIN_METADATA_NAME ), record );
+ }
+ else if ( ARCHETYPE_METADATA_NAME.equals( name ) )
+ {
+ populateArchetypeEntries( record );
}
}
}
- record.setClasses( classes.toString() );
- record.setFiles( fileBuffer.toString() );
+ if ( classes.length() > 0 )
+ {
+ record.setClasses( classes.toString() );
+ }
+ if ( fileBuffer.length() > 0 )
+ {
+ record.setFiles( fileBuffer.toString() );
+ }
+ }
+
+ private void populateArchetypeEntries( StandardArtifactIndexRecord record )
+ {
+ // Typically discovered as a JAR
+ record.setType( "maven-archetype" );
}
- private Xpp3Dom readPluginMetadata( File file )
+ private Xpp3Dom readXmlMetadataFileInJar( File file, String name )
throws RepositoryIndexException
{
// TODO: would be more efficient with original ZipEntry still around
try
{
zipFile = new ZipFile( file );
- ZipEntry entry = zipFile.getEntry( PLUGIN_METADATA_NAME );
+ ZipEntry entry = zipFile.getEntry( name );
xpp3Dom = Xpp3DomBuilder.build( new InputStreamReader( zipFile.getInputStream( entry ) ) );
}
catch ( ZipException e )
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()
throws RepositoryIndexException
{