1 package org.apache.maven.project;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import java.io.File;
19 import java.io.FileNotFoundException;
20 import java.net.URI;
21 import java.net.URISyntaxException;
22 import java.net.URL;
23 import java.util.Arrays;
24
25 import org.apache.maven.artifact.repository.ArtifactRepository;
26 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
27 import org.apache.maven.model.building.ModelBuildingException;
28 import org.apache.maven.model.building.ModelProblem;
29 import org.apache.maven.repository.RepositorySystem;
30 import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
31 import org.codehaus.plexus.ContainerConfiguration;
32 import org.codehaus.plexus.PlexusConstants;
33 import org.codehaus.plexus.PlexusTestCase;
34 import org.eclipse.aether.DefaultRepositorySystemSession;
35
36
37
38
39 public abstract class AbstractMavenProjectTestCase
40 extends PlexusTestCase
41 {
42 protected ProjectBuilder projectBuilder;
43
44 protected RepositorySystem repositorySystem;
45
46 @Override
47 protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
48 {
49 super.customizeContainerConfiguration( containerConfiguration );
50 containerConfiguration.setAutoWiring( true );
51 containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
52 }
53
54 protected void setUp()
55 throws Exception
56 {
57 super.setUp();
58
59 if ( getContainer().hasComponent( ProjectBuilder.class, "test" ) )
60 {
61 projectBuilder = lookup( ProjectBuilder.class, "test" );
62 }
63 else
64 {
65
66 projectBuilder = lookup( ProjectBuilder.class );
67 }
68
69 repositorySystem = lookup( RepositorySystem.class );
70 }
71
72 @Override
73 protected void tearDown()
74 throws Exception
75 {
76 projectBuilder = null;
77
78 super.tearDown();
79 }
80
81 protected ProjectBuilder getProjectBuilder()
82 {
83 return projectBuilder;
84 }
85
86 @Override
87 protected String getCustomConfigurationName()
88 {
89 return AbstractMavenProjectTestCase.class.getName().replace( '.', '/' ) + ".xml";
90 }
91
92
93
94
95
96 protected File getLocalRepositoryPath()
97 throws FileNotFoundException, URISyntaxException
98 {
99 File markerFile = getFileForClasspathResource( "local-repo/marker.txt" );
100
101 return markerFile.getAbsoluteFile().getParentFile();
102 }
103
104 protected static File getFileForClasspathResource( String resource )
105 throws FileNotFoundException
106 {
107 ClassLoader cloader = Thread.currentThread().getContextClassLoader();
108
109 URL resourceUrl = cloader.getResource( resource );
110
111 if ( resourceUrl == null )
112 {
113 throw new FileNotFoundException( "Unable to find: " + resource );
114 }
115
116 return new File( URI.create( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
117 }
118
119 protected ArtifactRepository getLocalRepository()
120 throws Exception
121 {
122 ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
123
124 ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null );
125
126 return r;
127 }
128
129
130
131
132
133 protected MavenProject getProjectWithDependencies( File pom )
134 throws Exception
135 {
136 ProjectBuildingRequest configuration = newBuildingRequest();
137 configuration.setRemoteRepositories( Arrays.asList( new ArtifactRepository[] {} ) );
138 configuration.setProcessPlugins( false );
139 configuration.setResolveDependencies( true );
140
141 try
142 {
143 return projectBuilder.build( pom, configuration ).getProject();
144 }
145 catch ( Exception e )
146 {
147 Throwable cause = e.getCause();
148 if ( cause instanceof ModelBuildingException )
149 {
150 String message = "In: " + pom + "\n\n";
151 for ( ModelProblem problem : ( (ModelBuildingException) cause ).getProblems() )
152 {
153 message += problem + "\n";
154 }
155 System.out.println( message );
156 }
157
158 throw e;
159 }
160 }
161
162 protected MavenProject getProject( File pom )
163 throws Exception
164 {
165 ProjectBuildingRequest configuration = newBuildingRequest();
166
167 return projectBuilder.build( pom, configuration ).getProject();
168 }
169
170 protected MavenProject getProjectFromRemoteRepository( final File pom )
171 throws Exception
172 {
173 final ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
174 configuration.setLocalRepository( this.getLocalRepository() );
175 configuration.setRemoteRepositories( Arrays.asList( this.repositorySystem.createDefaultRemoteRepository() ) );
176 initRepoSession( configuration );
177
178 return projectBuilder.build( pom, configuration ).getProject();
179 }
180
181 protected ProjectBuildingRequest newBuildingRequest()
182 throws Exception
183 {
184 ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
185 configuration.setLocalRepository( getLocalRepository() );
186 initRepoSession( configuration );
187 return configuration;
188 }
189
190 protected void initRepoSession( ProjectBuildingRequest request )
191 {
192 File localRepo = new File( request.getLocalRepository().getBasedir() );
193 DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
194 repoSession.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) );
195 request.setRepositorySession( repoSession );
196 }
197
198 }