maven-repository-builder-1.0~alpha2/0000755000175000017500000000000011240611515017541 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/0000755000175000017500000000000011240611515020330 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/0000755000175000017500000000000011240611515021307 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/0000755000175000017500000000000011240611515023321 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/projects/0000755000175000017500000000000011240611515025152 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/0000755000175000017500000000000011240611515033225 5ustar twernertwerner././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000755000175000017500000000000011240611515033567 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/src/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000755000175000017500000000000011240611515033567 5ustar twernertwerner././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/src/main/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000755000175000017500000000000011240611515033567 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/src/main/assembly/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000755000175000017500000000000011240611515033567 5ustar twernertwerner././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/src/main/assembly/repo.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000644000175000017500000000046210643501347033602 0ustar twernertwerner repo dir false true / ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/project/pom.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pr0000644000175000017500000000144410643501347033603 0ustar twernertwerner 4.0.0 massembly.210 parent-on-fs 1.0-SNAPSHOT massembly.210.test massembly-210-direct-parent-on-fs jar 1.0-SNAPSHOT massembly-210-direct-parent-on-fs junit junit 3.8.1 test ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/pom.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent-on-fs/po0000644000175000017500000000060610643501347033577 0ustar twernertwerner 4.0.0 massembly.210 parent-on-fs pom 1.0-SNAPSHOT maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/0000755000175000017500000000000011240611515032205 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/0000755000175000017500000000000011240611515032774 5ustar twernertwerner././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main0000755000175000017500000000000011240611515033641 5ustar twernertwerner././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main0000755000175000017500000000000011240611515033641 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/src/main0000644000175000017500000000046210635615261033656 0ustar twernertwerner repo dir false true / maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-210-direct-parent/pom.xml0000644000175000017500000000142210635615261033532 0ustar twernertwerner 4.0.0 massembly.210 parent 1.0-SNAPSHOT massembly.210.test massembly-210-direct-parent jar 1.0-SNAPSHOT massembly-210-direct-parent junit junit 3.8.1 test ././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000755000175000017500000000000011240611515033714 5ustar twernertwerner././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/src/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000755000175000017500000000000011240611515033714 5ustar twernertwerner././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/src/main/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000755000175000017500000000000011240611515033714 5ustar twernertwerner././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/src/main/assembly/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000755000175000017500000000000011240611515033714 5ustar twernertwerner././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/src/main/assembly/repo.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000644000175000017500000000046210645574307033737 0ustar twernertwerner repo dir false true / ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/pom.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-218-classifier-dependency/0000644000175000017500000000142210645574307033734 0ustar twernertwerner 4.0.0 massembly.210 parent 1.0-SNAPSHOT massembly.210.test massembly-210-direct-parent jar 1.0-SNAPSHOT massembly-210-direct-parent junit junit 3.8.1 test maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/0000755000175000017500000000000011240611515033430 5ustar twernertwerner././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/src/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/sr0000755000175000017500000000000011240611515033775 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/src/main/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/sr0000755000175000017500000000000011240611515033775 5ustar twernertwerner././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/src/main/assembly/maven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/sr0000755000175000017500000000000011240611515033775 5ustar twernertwerner././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/src/main/assembly/repo.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/sr0000644000175000017500000000046210645574307034020 0ustar twernertwerner repo dir false true / ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/pom.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/projects/massembly-219-snapshot-dependency/po0000644000175000017500000000142210645574307034007 0ustar twernertwerner 4.0.0 massembly.210 parent 1.0-SNAPSHOT massembly.210.test massembly-210-direct-parent jar 1.0-SNAPSHOT massembly-210-direct-parent junit junit 3.8.1 test maven-repository-builder-1.0~alpha2/src/test/resources/marker.txt0000644000175000017500000000005510635615261025354 0ustar twernertwernermarker file for classpath basedir location...maven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/0000755000175000017500000000000011240611515027031 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/0000755000175000017500000000000011240611515031025 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/0000755000175000017500000000000011240611515031327 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/0000755000175000017500000000000011240611515032412 5ustar twernertwerner././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/maven-metadata.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/maven-m0000644000175000017500000000046410635607205033711 0ustar twernertwerner massembly.210 child 1.0-SNAPSHOT 1.0-SNAPSHOT 20070618225815 ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/maven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNA0000755000175000017500000000000011240611515033250 5ustar twernertwerner././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-SNAPSHOT.pommaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNA0000644000175000017500000000102110643473637033265 0ustar twernertwerner parent massembly.210 1.0-SNAPSHOT 4.0.0 massembly.210 child child 1.0-SNAPSHOT junit junit 3.8.1 test ././@LongLink0000000000000000000000000000017500000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/maven-metadata.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/child/1.0-SNA0000644000175000017500000000053610635607205033266 0ustar twernertwerner massembly.210 child 1.0-SNAPSHOT 20070618.225814 2 20070618225815 maven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/0000755000175000017500000000000011240611515032620 5ustar twernertwerner././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/maven-metadata.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/maven-0000644000175000017500000000046510635607205033743 0ustar twernertwerner massembly.210 parent 1.0-SNAPSHOT 1.0-SNAPSHOT 20070618225814 ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/maven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SN0000755000175000017500000000000011240611515033355 5ustar twernertwerner././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/maven-metadata.xmlmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SN0000644000175000017500000000053710635607205033374 0ustar twernertwerner massembly.210 parent 1.0-SNAPSHOT 20070618.225814 3 20070618225814 ././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pommaven-repository-builder-1.0~alpha2/src/test/resources/remote-repository/massembly/210/parent/1.0-SN0000644000175000017500000000154510643473637033405 0ustar twernertwerner 4.0.0 massembly.210 parent pom 1.0-SNAPSHOT parent junit junit 3.8.1 test test.repo file://${testRepoBasedir} child maven-repository-builder-1.0~alpha2/src/test/java/0000755000175000017500000000000011240611515022230 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/java/org/0000755000175000017500000000000011240611515023017 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/java/org/apache/0000755000175000017500000000000011240611515024240 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/0000755000175000017500000000000011240611515025346 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/0000755000175000017500000000000011240611515026614 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/repository/0000755000175000017500000000000011240611515031033 5ustar twernertwerner././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.javamaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/repository/TestRepositoryB0000644000175000017500000000134110635615261034107 0ustar twernertwernerpackage org.apache.maven.shared.repository; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.project.MavenProject; public class TestRepositoryBuilderConfigSource implements RepositoryBuilderConfigSource { private ArtifactRepository localRepository; private MavenProject project; public void setLocalRepository( ArtifactRepository localRepository ) { this.localRepository = localRepository; } public void setProject( MavenProject project ) { this.project = project; } public ArtifactRepository getLocalRepository() { return localRepository; } public MavenProject getProject() { return project; } } ././@LongLink0000000000000000000000000000017100000000000011564 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryAssemblerTest.javamaven-repository-builder-1.0~alpha2/src/test/java/org/apache/maven/shared/repository/DefaultReposito0000644000175000017500000002435410645574307034116 0ustar twernertwernerpackage org.apache.maven.shared.repository; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.model.Profile; import org.apache.maven.model.Repository; import org.apache.maven.model.RepositoryPolicy; import org.apache.maven.profiles.DefaultProfileManager; import org.apache.maven.profiles.ProfileManager; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.shared.repository.model.DefaultRepositoryInfo; import org.codehaus.plexus.PlexusTestCase; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Collections; public class DefaultRepositoryAssemblerTest extends PlexusTestCase { private MavenProjectBuilder projectBuilder; private ArtifactRepositoryLayout defaultLayout; private ArtifactRepositoryFactory repoFactory; private ArtifactFactory artifactFactory; private ArtifactRepository localRepository; private ArtifactResolver artifactResolver; private ArtifactMetadataSource metadataSource; private DefaultProfileManager profileManager; protected void setUp() throws Exception { super.setUp(); projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() ); defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.class.getName(), "default" ); repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class.getName() ); artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class.getName() ); artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.class.getName() ); metadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.class.getName() ); File localRepo = new File( getBasedir(), "target/local-repository" ); localRepository = repoFactory.createArtifactRepository( "local", localRepo.getAbsolutePath(), defaultLayout, null, null ); } private MavenProject getProject( String projectResource, String parentGroupId, String parentArtifactId, String parentVersion, boolean preCacheParent ) throws ProjectBuildingException, IOException, InvalidDependencyVersionException { ClassLoader cloader = Thread.currentThread().getContextClassLoader(); URL res = cloader.getResource( "projects/" + projectResource ); File projectFile = new File( res.getPath() ).getAbsoluteFile(); if ( preCacheParent ) { // pre-load the parent model...this is a hack! Artifact parentArtifact = artifactFactory.createParentArtifact( parentGroupId, parentArtifactId, parentVersion ); projectBuilder.buildFromRepository( parentArtifact, Collections.EMPTY_LIST, localRepository ); } MavenProject project = projectBuilder.build( projectFile, localRepository, getProfileManager() ); project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) ); return project; } private ProfileManager getProfileManager() throws IOException { if ( profileManager == null ) { File repoDir = getTestRemoteRepositoryBasedir(); Profile profile = new Profile(); Repository repo = new Repository(); repo.setId( "test.repo" ); repo.setUrl( repoDir.toURL().toExternalForm() ); repo.setReleases( new RepositoryPolicy() ); repo.setSnapshots( new RepositoryPolicy() ); profile.addRepository( repo ); profileManager = new DefaultProfileManager( getContainer() ); profileManager.addProfile( profile ); profileManager.explicitlyActivate( "test.repo" ); } return profileManager; } private File getTestRemoteRepositoryBasedir() throws IOException { ClassLoader cloader = Thread.currentThread().getContextClassLoader(); URL res = cloader.getResource( "marker.txt" ); File markerFile = new File( res.getPath() ); markerFile = markerFile.getCanonicalFile(); File repoDir = new File( markerFile.getParentFile(), "remote-repository" ); return repoDir; } public void test_MASSEMBLY_210_projectParentIsIncludedInRepository() throws ProjectBuildingException, RepositoryAssemblyException, IOException, InvalidDependencyVersionException { File repoDir = getTestRemoteRepositoryBasedir(); ArtifactRepository localRepository = repoFactory.createArtifactRepository( "local", repoDir.getAbsoluteFile() .toURL() .toExternalForm(), defaultLayout, null, null ); MavenProject project = getProject( "massembly-210-direct-parent/pom.xml", "massembly.210", "parent", "1.0-SNAPSHOT", true ); TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource(); cs.setProject( project ); cs.setLocalRepository( localRepository ); DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver, defaultLayout, repoFactory, metadataSource, projectBuilder ); File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent" ); DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo(); assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs ); File parentFile = new File( repositoryDirectory, "massembly/210/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom" ); assertTrue( parentFile.exists() ); } public void test_MASSEMBLY_210_projectParentIsNotInRepository() throws ProjectBuildingException, RepositoryAssemblyException, IOException, InvalidDependencyVersionException { File repoDir = getTestRemoteRepositoryBasedir(); ArtifactRepository localRepository = repoFactory.createArtifactRepository( "local", repoDir.getAbsoluteFile() .toURL() .toExternalForm(), defaultLayout, null, null ); MavenProject project = getProject( "massembly-210-direct-parent-on-fs/project/pom.xml", null, null, null, false ); TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource(); cs.setProject( project ); cs.setLocalRepository( localRepository ); DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver, defaultLayout, repoFactory, metadataSource, projectBuilder ); File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent-on-fs" ); DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo(); assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs ); File parentFile = new File( repositoryDirectory, "massembly/210/parent-on-fs/1.0-SNAPSHOT/parent-on-fs-1.0-SNAPSHOT.pom" ); assertTrue( parentFile.exists() ); } public void test_MASSEMBLY_218_projectDependencyWithClassifier() throws ProjectBuildingException, RepositoryAssemblyException, IOException, InvalidDependencyVersionException { File repoDir = getTestRemoteRepositoryBasedir(); ArtifactRepository localRepository = repoFactory.createArtifactRepository( "local", repoDir.getAbsoluteFile() .toURL() .toExternalForm(), defaultLayout, null, null ); MavenProject project = getProject( "massembly-210-direct-parent-on-fs/project/pom.xml", null, null, null, false ); TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource(); cs.setProject( project ); cs.setLocalRepository( localRepository ); DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver, defaultLayout, repoFactory, metadataSource, projectBuilder ); File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent-on-fs" ); DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo(); assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs ); File parentFile = new File( repositoryDirectory, "massembly/210/parent-on-fs/1.0-SNAPSHOT/parent-on-fs-1.0-SNAPSHOT.pom" ); assertTrue( parentFile.exists() ); } } maven-repository-builder-1.0~alpha2/src/main/0000755000175000017500000000000011240611515021254 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/0000755000175000017500000000000011240611515022175 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/org/0000755000175000017500000000000011240611515022764 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/org/apache/0000755000175000017500000000000011240611515024205 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/0000755000175000017500000000000011240611515025313 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/0000755000175000017500000000000011240611515026561 5ustar twernertwernermaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/0000755000175000017500000000000011240611515031000 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryAssemblyException.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryAssem0000755000175000017500000000246110541013777034112 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository; /** * @author Jason van Zyl */ public class RepositoryAssemblyException extends Exception { private static final long serialVersionUID = 1L; public RepositoryAssemblyException( String string ) { super( string ); } public RepositoryAssemblyException( String string, Throwable throwable ) { super( string, throwable ); } public RepositoryAssemblyException( Throwable throwable ) { super( throwable ); } } maven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/utils/0000755000175000017500000000000011240611515032140 5ustar twernertwerner././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/utils/DigestUtils.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/utils/DigestUti0000755000175000017500000001112310541013777033776 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.codehaus.plexus.util.IOUtil; /** * Create a digest for a file. Stolen from repository-utils - once released, use that instead. * * @author Brett Porter * @todo [jdcasey] This needs unit tests. */ public final class DigestUtils { private static final int CHECKSUM_BUFFER_SIZE = 16384; private static final int BYTE_MASK = 0xFF; private DigestUtils() { } public static String createChecksum( File file, String algorithm ) throws IOException, NoSuchAlgorithmException { MessageDigest digest = MessageDigest.getInstance( algorithm ); InputStream fis = new FileInputStream( file ); try { byte[] buffer = new byte[CHECKSUM_BUFFER_SIZE]; int numRead; do { numRead = fis.read( buffer ); if ( numRead > 0 ) { digest.update( buffer, 0, numRead ); } } while ( numRead != -1 ); } finally { IOUtil.close( fis ); } return byteArrayToHexStr( digest.digest() ); } public boolean verifyChecksum( File file, String checksum, String algorithm ) throws NoSuchAlgorithmException, IOException { boolean result = true; String trimmedChecksum = checksum.replace( '\n', ' ' ).trim(); // Free-BSD / openssl Matcher m = Pattern.compile( algorithm.replaceAll( "-", "" ) + "\\s*\\((.*?)\\)\\s*=\\s*([a-zA-Z0-9]+)" ) .matcher( trimmedChecksum ); if ( m.matches() ) { String filename = m.group( 1 ); if ( !filename.equals( file.getName() ) ) { // TODO: provide better warning result = false; } trimmedChecksum = m.group( 2 ); } else { // GNU tools m = Pattern.compile( "([a-zA-Z0-9]+)\\s\\*?(.+)" ).matcher( trimmedChecksum ); if ( m.matches() ) { String filename = m.group( 2 ); if ( !filename.equals( file.getName() ) ) { // TODO: provide better warning result = false; } trimmedChecksum = m.group( 1 ); } } if ( result ) { //Create checksum for jar file String sum = createChecksum( file, algorithm ); result = trimmedChecksum.toUpperCase().equals( sum.toUpperCase() ); } return result; } /** * Convert an incoming array of bytes into a string that represents each of * the bytes as two hex characters. * * @param data */ private static String byteArrayToHexStr( byte[] data ) { String output = ""; for ( int cnt = 0; cnt < data.length; cnt++ ) { //Deposit a byte into the 8 lsb of an int. int tempInt = data[cnt] & BYTE_MASK; //Get hex representation of the int as a string. String tempStr = Integer.toHexString( tempInt ); //Append a leading 0 if necessary so that each hex string will contain 2 characters. if ( tempStr.length() == 1 ) { tempStr = "0" + tempStr; } //Concatenate the two characters to the output string. output = output + tempStr; } return output.toUpperCase(); } } maven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/0000755000175000017500000000000011240611515032100 5ustar twernertwerner././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/GroupVersionAlignment.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/GroupVers0000644000175000017500000000174710541013777034001 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository.model; import java.util.List; public interface GroupVersionAlignment { String getId(); List getExcludes(); String getVersion(); } ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/DefaultRe0000644000175000017500000000406610643473637033725 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository.model; import org.apache.maven.artifact.Artifact; import java.util.List; public class DefaultRepositoryInfo implements RepositoryInfo { private boolean includeMetadata; private String scope = Artifact.SCOPE_COMPILE; private List includes; private List groupVersionAlignments; private List excludes; public List getExcludes() { return excludes; } public void setGroupVersionAlignments( List groupVersionAlignments ) { this.groupVersionAlignments = groupVersionAlignments; } public void setIncludeMetadata( boolean includeMetadata ) { this.includeMetadata = includeMetadata; } public void setIncludes( List includes ) { this.includes = includes; } public void setScope( String scope ) { this.scope = scope; } public List getGroupVersionAlignments() { return groupVersionAlignments; } public List getIncludes() { return includes; } public String getScope() { return scope; } public boolean isIncludeMetadata() { return includeMetadata; } public void setExcludes( List excludes ) { this.excludes = excludes; } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/RepositoryInfo.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/model/Repositor0000644000175000017500000000205310541013777034022 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository.model; import java.util.List; public interface RepositoryInfo { List getGroupVersionAlignments(); boolean isIncludeMetadata(); String getScope(); List getIncludes(); List getExcludes(); } ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/DefaultReposito0000755000175000017500000007113610656636365034073 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; import org.apache.maven.artifact.repository.DefaultArtifactRepository; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; import org.apache.maven.artifact.repository.metadata.Versioning; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.artifact.resolver.filter.AndArtifactFilter; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Exclusion; import org.apache.maven.project.DefaultMavenProjectBuilder; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter; import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter; import org.apache.maven.shared.artifact.filter.ScopeArtifactFilter; import org.apache.maven.shared.repository.model.GroupVersionAlignment; import org.apache.maven.shared.repository.model.RepositoryInfo; import org.apache.maven.shared.repository.utils.DigestUtils; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.console.ConsoleLogger; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.lang.reflect.Field; import java.security.NoSuchAlgorithmException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TimeZone; /** * @author Jason van Zyl * @plexus.component role="org.apache.maven.shared.repository.RepositoryAssembler" role-hint="default" */ // todo will need to pop the processed project cache using reflection public class DefaultRepositoryAssembler extends AbstractLogEnabled implements RepositoryAssembler, Contextualizable { private static final String[] PREFERRED_RESOLVER_HINTS = { "project-cache-aware", // Provided in Maven 2.1-SNAPSHOT "default" }; protected static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" ); protected static final String UTC_TIMESTAMP_PATTERN = "yyyyMMddHHmmss"; /** * @plexus.requirement */ protected ArtifactFactory artifactFactory; // Replaced by Contextualizable code, to select the resolver in order of preference. // // @plexus.requirement // protected ArtifactResolver artifactResolver; /** * @plexus.requirement */ protected ArtifactRepositoryLayout repositoryLayout; /** * @plexus.requirement */ protected ArtifactRepositoryFactory artifactRepositoryFactory; /** * @plexus.requirement */ protected ArtifactMetadataSource metadataSource; /** * @plexus.requirement */ protected MavenProjectBuilder projectBuilder; public DefaultRepositoryAssembler() { // used for plexus init. } public DefaultRepositoryAssembler( ArtifactFactory artifactFactory, ArtifactResolver artifactResolver, ArtifactRepositoryLayout repositoryLayout, ArtifactRepositoryFactory artifactRepositoryFactory, ArtifactMetadataSource metadataSource, MavenProjectBuilder projectBuilder ) { // used for testing, primarily. this.artifactFactory = artifactFactory; this.artifactResolver = artifactResolver; this.repositoryLayout = repositoryLayout; this.artifactRepositoryFactory = artifactRepositoryFactory; this.metadataSource = metadataSource; this.projectBuilder = projectBuilder; enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, getClass().getName() + "::Internal" ) ); } public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository, RepositoryBuilderConfigSource configSource ) throws RepositoryAssemblyException { MavenProject project = configSource.getProject(); ArtifactRepository localRepository = configSource.getLocalRepository(); Map groupVersionAlignments = createGroupVersionAlignments( repository.getGroupVersionAlignments() ); ArtifactRepository targetRepository = createLocalRepository( repositoryDirectory ); ArtifactResolutionResult result = null; Set dependencyArtifacts = project.getDependencyArtifacts(); if ( dependencyArtifacts == null ) { Logger logger = getLogger(); if ( logger.isDebugEnabled() ) { logger.debug( "dependency-artifact set for project: " + project.getId() + " is null. Skipping repository processing." ); } return; } try { // i have to get everything first as a filter or transformation here // doesn't seem to work // to align everything. If I use a filter to change the version on // the fly then I get the // I get JARs but no POMs, and in some directories POMs with no // JARs. // FIXME I'm not getting runtime dependencies here result = artifactResolver.resolveTransitively( dependencyArtifacts, project.getArtifact(), getManagedVersionMap( project ), localRepository, project.getRemoteArtifactRepositories(), metadataSource ); } catch ( ArtifactResolutionException e ) { throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e ); } catch ( ArtifactNotFoundException e ) { throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e ); } catch ( InvalidVersionSpecificationException e ) { throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e ); } try { // Blow the cache in the project builder so that we get POMs again // on this next download invalidateProccessedProjectCache(); } catch ( Exception e ) { throw new RepositoryAssemblyException( "Error invalidating the processed project cache.", e ); } ArtifactFilter filter = buildRepositoryFilter( repository, project ); assembleRepositoryArtifacts( result, filter, project, localRepository, targetRepository, repositoryDirectory, groupVersionAlignments ); ArtifactRepository centralRepository = findCentralRepository( project ); if ( repository.isIncludeMetadata() ) { assembleRepositoryMetadata( result, filter, centralRepository, targetRepository ); } addPomWithAncestry( project.getArtifact(), project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments, project ); } private ArtifactFilter buildRepositoryFilter( RepositoryInfo repository, MavenProject project ) { AndArtifactFilter filter = new AndArtifactFilter(); ArtifactFilter scopeFilter = new ScopeArtifactFilter( repository.getScope() ); filter.add( scopeFilter ); // ---------------------------------------------------------------------------- // Includes // // We'll take everything if no includes are specified to try and make // this // process more maintainable. Don't want to have to update the assembly // descriptor everytime the POM is updated. // ---------------------------------------------------------------------------- List includes = repository.getIncludes(); if ( ( includes == null ) || includes.isEmpty() ) { List patterns = new ArrayList(); Set projectArtifacts = project.getDependencyArtifacts(); if ( projectArtifacts != null ) { for ( Iterator it = projectArtifacts.iterator(); it.hasNext(); ) { Artifact artifact = (Artifact) it.next(); patterns.add( artifact.getDependencyConflictId() ); } } PatternIncludesArtifactFilter includeFilter = new PatternIncludesArtifactFilter( patterns, true ); filter.add( includeFilter ); } else { filter.add( new PatternIncludesArtifactFilter( repository.getIncludes(), true ) ); } // ---------------------------------------------------------------------------- // Excludes // // We still want to make it easy to exclude a few things even if we // slurp // up everything. // ---------------------------------------------------------------------------- List excludes = repository.getExcludes(); if ( ( excludes != null ) && !excludes.isEmpty() ) { filter.add( new PatternExcludesArtifactFilter( repository.getExcludes(), true ) ); } return filter; } private void assembleRepositoryArtifacts( ArtifactResolutionResult result, ArtifactFilter filter, MavenProject project, ArtifactRepository localRepository, ArtifactRepository targetRepository, File repositoryDirectory, Map groupVersionAlignments ) throws RepositoryAssemblyException { try { // Now that we have the graph, let's try to align it to versions // that we want and remove // the repository we previously populated. FileUtils.deleteDirectory( repositoryDirectory ); FileUtils.mkdir( repositoryDirectory.getAbsolutePath() ); for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); ) { Artifact a = (Artifact) i.next(); if ( filter.include( a ) ) { getLogger().debug( "Re-resolving: " + a + " for repository assembly." ); setAlignment( a, groupVersionAlignments ); // We need to flip it back to not being resolved so we can // look for it again! a.setResolved( false ); artifactResolver.resolve( a, project.getRemoteArtifactRepositories(), localRepository ); a.setVersion( a.getBaseVersion() ); File targetFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( a ) ); FileUtils.copyFile( a.getFile(), targetFile ); writeChecksums( targetFile ); addPomWithAncestry( a, project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments, project ); } } } catch ( ArtifactResolutionException e ) { throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e ); } catch ( ArtifactNotFoundException e ) { throw new RepositoryAssemblyException( "Error resolving artifacts: " + e.getMessage(), e ); } catch ( IOException e ) { throw new RepositoryAssemblyException( "Error writing artifact metdata.", e ); } } /** * * @param pomFileOverride This is used to allow injection of a POM's file directly, for * cases where the POM has not been installed into the repository yet. */ private void addPomWithAncestry( final Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository, ArtifactRepository targetRepository, Map groupVersionAlignments, MavenProject masterProject ) throws RepositoryAssemblyException { String type = artifact.getType(); Map refs = masterProject.getProjectReferences(); String projectKey = ArtifactUtils.versionlessKey( artifact ); MavenProject p; if ( artifact == masterProject.getArtifact() ) { p = masterProject; } else if ( refs.containsKey( projectKey ) ) { p = (MavenProject) refs.get( projectKey ); } else { try { artifact.isSnapshot(); Artifact pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion() ); getLogger().debug( "Building MavenProject instance for: " + pomArtifact + ". NOTE: This SHOULD BE available in the Artifact API! ...but it's not." ); p = projectBuilder.buildFromRepository( pomArtifact, remoteArtifactRepositories, localRepository ); } catch ( ProjectBuildingException e ) { throw new RepositoryAssemblyException( "Error reading POM for: " + artifact.getId(), e ); } } // if we're dealing with a POM artifact, then we've already copied the POM itself; only process ancestry. // NOTE: We need to preserve the original artifact for comparison here. if ( "pom".equals( type ) ) { p = p.getParent(); } while( p != null ) { Artifact destArtifact = artifactFactory.createProjectArtifact( p.getGroupId(), p.getArtifactId(), p .getVersion() ); setAlignment( destArtifact, groupVersionAlignments ); File sourceFile = p.getFile(); // try to use the POM file from the project instance itself first. if ( ( sourceFile == null ) || !sourceFile.exists() ) { // something that hasn't been realigned yet...we want to read from the original location. Artifact srcArtifact = artifactFactory.createProjectArtifact( p.getGroupId(), p.getArtifactId(), p .getVersion() ); sourceFile = new File( localRepository.getBasedir(), localRepository.pathOf( srcArtifact ) ); } if ( !sourceFile.exists() ) { break; } File targetFile = new File( targetRepository.getBasedir(), targetRepository.pathOf( destArtifact ) ); try { FileUtils.copyFile( sourceFile, targetFile ); } catch ( IOException e ) { throw new RepositoryAssemblyException( "Error writing POM metdata: " + destArtifact.getId(), e ); } try { writeChecksums( targetFile ); } catch ( IOException e ) { throw new RepositoryAssemblyException( "Error writing checksums for POM: " + destArtifact.getId(), e ); } p = p.getParent(); } } private ArtifactRepository findCentralRepository( MavenProject project ) { ArtifactRepository centralRepository = null; for ( Iterator i = project.getRemoteArtifactRepositories().iterator(); i.hasNext(); ) { ArtifactRepository r = (ArtifactRepository) i.next(); if ( "central".equals( r.getId() ) ) { centralRepository = r; } } return centralRepository; } private void assembleRepositoryMetadata( ArtifactResolutionResult result, ArtifactFilter filter, ArtifactRepository centralRepository, ArtifactRepository targetRepository ) throws RepositoryAssemblyException { for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); ) { Artifact a = (Artifact) i.next(); if ( filter.include( a ) ) { Versioning v = new Versioning(); v.setRelease( a.getVersion() ); v.setLatest( a.getVersion() ); v.addVersion( a.getVersion() ); v.setLastUpdated( getUtcDateFormatter().format( new Date() ) ); ArtifactRepositoryMetadata metadata = new ArtifactRepositoryMetadata( a, v ); String path = targetRepository.pathOfLocalRepositoryMetadata( metadata, centralRepository ); File metadataFile = new File( targetRepository.getBasedir(), path ); MetadataXpp3Writer metadataWriter = new MetadataXpp3Writer(); Writer writer = null; try { writer = new FileWriter( metadataFile ); metadataWriter.write( writer, metadata.getMetadata() ); } catch ( IOException e ) { throw new RepositoryAssemblyException( "Error writing artifact metdata.", e ); } finally { IOUtil.close( writer ); } try { writeChecksums( metadataFile ); File metadataFileRemote = new File( targetRepository.getBasedir(), targetRepository .pathOfRemoteRepositoryMetadata( metadata ) ); FileUtils.copyFile( metadataFile, metadataFileRemote ); FileUtils.copyFile( new File( metadataFile.getParentFile(), metadataFile.getName() + ".sha1" ), new File( metadataFileRemote.getParentFile(), metadataFileRemote.getName() + ".sha1" ) ); FileUtils.copyFile( new File( metadataFile.getParentFile(), metadataFile.getName() + ".md5" ), new File( metadataFileRemote.getParentFile(), metadataFileRemote.getName() + ".md5" ) ); } catch ( IOException e ) { throw new RepositoryAssemblyException( "Error writing artifact metdata.", e ); } } } } private void writeChecksums( File file ) throws IOException, RepositoryAssemblyException { try { String md5 = DigestUtils.createChecksum( file, "MD5" ); String sha1 = DigestUtils.createChecksum( file, "SHA-1" ); FileUtils.fileWrite( new File( file.getParentFile(), file.getName() + ".md5" ).getAbsolutePath(), md5 .toLowerCase() ); FileUtils.fileWrite( new File( file.getParentFile(), file.getName() + ".sha1" ).getAbsolutePath(), sha1 .toLowerCase() ); } catch ( NoSuchAlgorithmException e ) { throw new RepositoryAssemblyException( "Unable to get write checksums: " + e.getMessage(), e ); } } protected Map createGroupVersionAlignments( List versionAlignments ) { Map groupVersionAlignments = new HashMap(); if ( versionAlignments != null ) { for ( Iterator i = versionAlignments.iterator(); i.hasNext(); ) { GroupVersionAlignment alignment = (GroupVersionAlignment) i.next(); groupVersionAlignments.put( alignment.getId(), alignment ); } } return groupVersionAlignments; } protected static DateFormat getUtcDateFormatter() { DateFormat utcDateFormatter = new SimpleDateFormat( UTC_TIMESTAMP_PATTERN ); utcDateFormatter.setTimeZone( UTC_TIME_ZONE ); return utcDateFormatter; } protected ArtifactRepository createLocalRepository( File directory ) { String localRepositoryUrl = directory.getAbsolutePath(); if ( !localRepositoryUrl.startsWith( "file:" ) ) { localRepositoryUrl = "file://" + localRepositoryUrl; } return createRepository( "local", localRepositoryUrl, false, true, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN ); } public ArtifactRepository createRepository( String repositoryId, String repositoryUrl, boolean offline, boolean updateSnapshots, String globalChecksumPolicy ) { ArtifactRepository localRepository = new DefaultArtifactRepository( repositoryId, repositoryUrl, repositoryLayout ); boolean snapshotPolicySet = false; if ( offline ) { snapshotPolicySet = true; } if ( !snapshotPolicySet && updateSnapshots ) { artifactRepositoryFactory.setGlobalUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS ); } artifactRepositoryFactory.setGlobalChecksumPolicy( globalChecksumPolicy ); return localRepository; } private void invalidateProccessedProjectCache() throws Exception { Class klass = DefaultMavenProjectBuilder.class; try { Field field = klass.getDeclaredField( "processedProjectCache" ); field.setAccessible( true ); Object cache = field.get( projectBuilder ); cache.getClass().getDeclaredMethod( "clear", null ).invoke( cache, null ); field.setAccessible( false ); } catch( NoSuchFieldException e ) { // fine... no field, no cache. we'll ignore it. } } private void setAlignment( Artifact artifact, Map groupVersionAlignments ) { GroupVersionAlignment alignment = (GroupVersionAlignment) groupVersionAlignments.get( artifact.getGroupId() ); if ( alignment != null ) { if ( !alignment.getExcludes().contains( artifact.getArtifactId() ) ) { artifact.setVersion( alignment.getVersion() ); } } } // TODO: Remove this, once we can depend on Maven 2.0.7 or later...in which // MavenProject.getManagedVersionMap() exists. This is from MNG-1577. private Map getManagedVersionMap( MavenProject project ) throws InvalidVersionSpecificationException { DependencyManagement dependencyManagement = project.getModel().getDependencyManagement(); Map map = null; List deps; if ( ( dependencyManagement != null ) && ( ( deps = dependencyManagement.getDependencies() ) != null ) && ( deps.size() > 0 ) ) { map = new HashMap(); if ( getLogger().isDebugEnabled() ) { getLogger().debug( "Adding managed dependencies for " + project.getId() ); } for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); ) { Dependency d = (Dependency) i.next(); VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() ); Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange, d.getType(), d.getClassifier(), d.getScope(), d.isOptional() ); if ( getLogger().isDebugEnabled() ) { getLogger().debug( " " + artifact ); } // If the dependencyManagement section listed exclusions, // add them to the managed artifacts here so that transitive // dependencies will be excluded if necessary. if ( ( null != d.getExclusions() ) && !d.getExclusions().isEmpty() ) { List exclusions = new ArrayList(); Iterator exclItr = d.getExclusions().iterator(); while ( exclItr.hasNext() ) { Exclusion e = (Exclusion) exclItr.next(); exclusions.add( e.getGroupId() + ":" + e.getArtifactId() ); } ExcludesArtifactFilter eaf = new ExcludesArtifactFilter( exclusions ); artifact.setDependencyFilter( eaf ); } else { artifact.setDependencyFilter( null ); } map.put( d.getManagementKey(), artifact ); } } else if ( map == null ) { map = Collections.EMPTY_MAP; } return map; } public void contextualize( Context context ) throws ContextException { PlexusContainer container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); for ( int i = 0; i < PREFERRED_RESOLVER_HINTS.length; i++ ) { String hint = PREFERRED_RESOLVER_HINTS[i]; try { artifactResolver = (ArtifactResolver) container.lookup( ArtifactResolver.ROLE, hint ); break; } catch ( ComponentLookupException e ) { getLogger().debug( "Cannot find ArtifactResolver with hint: " + hint, e ); } } if ( artifactResolver == null ) { try { artifactResolver = (ArtifactResolver) container.lookup( ArtifactResolver.ROLE ); } catch ( ComponentLookupException e ) { getLogger().debug( "Cannot find ArtifactResolver with no hint.", e ); } } if ( artifactResolver == null ) { throw new ContextException( "Failed to lookup a valid ArtifactResolver implementation. Tried hints:\n" + Arrays.asList( PREFERRED_RESOLVER_HINTS ) ); } } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryAssembler.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryAssem0000755000175000017500000000241210541013777034106 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository; import java.io.File; import org.apache.maven.shared.repository.model.RepositoryInfo; /** * @author Jason van Zyl */ public interface RepositoryAssembler { String ROLE = RepositoryAssembler.class.getName(); public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository, RepositoryBuilderConfigSource configSource ) throws RepositoryAssemblyException; } ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootrootmaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryBuilderConfigSource.javamaven-repository-builder-1.0~alpha2/src/main/java/org/apache/maven/shared/repository/RepositoryBuild0000644000175000017500000000210610541013777034072 0ustar twernertwerner/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.maven.shared.repository; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.project.MavenProject; public interface RepositoryBuilderConfigSource { MavenProject getProject(); ArtifactRepository getLocalRepository(); } maven-repository-builder-1.0~alpha2/pom.xml0000644000175000017500000000623510757342337021103 0ustar twernertwerner 4.0.0 org.apache.maven.shared maven-shared-components 7 maven-repository-builder 1.0-alpha-2 Maven Repository Builder org.apache.maven maven-artifact 2.0.4 org.apache.maven maven-artifact-manager 2.0.4 org.apache.maven maven-project 2.0.4 org.apache.maven.shared maven-common-artifact-filters 1.0-alpha-1 junit junit 3.8.1 test org.apache.maven.shared maven-test-tools 1.0-alpha-1 test easymock easymock 1.2_Java1.3 test org.apache.maven.wagon wagon-file 1.0-beta-2 test org.apache.maven.wagon wagon-http-lightweight 1.0-beta-2 test maven-surefire-plugin 2.3 **/TestRepositoryBuilderConfigSource.java org.codehaus.plexus plexus-maven-plugin 1.3.5 create-component-descriptor descriptor scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-repository-builder-1.0-alpha-2 scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-repository-builder-1.0-alpha-2 https://svn.apache.org/repos/asf/maven/shared/tags/maven-repository-builder-1.0-alpha-2