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 String name = AbstractMavenProjectTestCase.class.getName().replace( '.', '/' ) + ".xml";
90 System.out.println( name );
91 return name;
92 }
93
94
95
96
97
98 protected File getLocalRepositoryPath()
99 throws FileNotFoundException, URISyntaxException
100 {
101 File markerFile = getFileForClasspathResource( "local-repo/marker.txt" );
102
103 return markerFile.getAbsoluteFile().getParentFile();
104 }
105
106 protected static File getFileForClasspathResource( String resource )
107 throws FileNotFoundException
108 {
109 ClassLoader cloader = Thread.currentThread().getContextClassLoader();
110
111 URL resourceUrl = cloader.getResource( resource );
112
113 if ( resourceUrl == null )
114 {
115 throw new FileNotFoundException( "Unable to find: " + resource );
116 }
117
118 return new File( URI.create( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
119 }
120
121 protected ArtifactRepository getLocalRepository()
122 throws Exception
123 {
124 ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
125
126 ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null );
127
128 return r;
129 }
130
131
132
133
134
135 protected MavenProject getProjectWithDependencies( File pom )
136 throws Exception
137 {
138 ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
139 configuration.setLocalRepository( getLocalRepository() );
140 configuration.setRemoteRepositories( Arrays.asList( new ArtifactRepository[] {} ) );
141 configuration.setProcessPlugins( false );
142 configuration.setResolveDependencies( true );
143 initRepoSession( configuration );
144
145 try
146 {
147 return projectBuilder.build( pom, configuration ).getProject();
148 }
149 catch ( Exception e )
150 {
151 Throwable cause = e.getCause();
152 if ( cause instanceof ModelBuildingException )
153 {
154 String message = "In: " + pom + "\n\n";
155 for ( ModelProblem problem : ( (ModelBuildingException) cause ).getProblems() )
156 {
157 message += problem + "\n";
158 }
159 System.out.println( message );
160 fail( message );
161 }
162
163 throw e;
164 }
165 }
166
167 protected MavenProject getProject( File pom )
168 throws Exception
169 {
170 ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
171 configuration.setLocalRepository( getLocalRepository() );
172 initRepoSession( configuration );
173
174 return projectBuilder.build( pom, configuration ).getProject();
175 }
176
177 protected void initRepoSession( ProjectBuildingRequest request )
178 {
179 File localRepo = new File( request.getLocalRepository().getBasedir() );
180 DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
181 session.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) );
182 request.setRepositorySession( session );
183 }
184
185 }