mirror of
https://github.com/apache/maven.git
synced 2025-03-08 01:30:33 +00:00
Clean up the caching to use weak hashmaps, to conserve some memory in large builds.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@593287 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4c2d75b726
commit
f1973980a5
@ -30,6 +30,7 @@
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
/**
|
||||
* This cache is meant to provide a reference of the project instances that are in the current build
|
||||
@ -37,30 +38,30 @@
|
||||
* to store inter-project references as such in MavenProject instances. An ArtifactResolver instance
|
||||
* will be used that can utilize this cache, but will also wrap the "default" ArtifactResolver
|
||||
* instance, so that can be used as a target for replacement implementations.
|
||||
*
|
||||
*
|
||||
* To retrieve from the build context: buildContext.retrieve( new ProjectBuildCache( false ) );
|
||||
*
|
||||
*
|
||||
* @author jdcasey
|
||||
*/
|
||||
public class ProjectBuildCache
|
||||
implements ManagedBuildData
|
||||
{
|
||||
|
||||
|
||||
private static final String BUILD_CONTEXT_KEY = ProjectBuildCache.class.getName();
|
||||
|
||||
|
||||
private static final String PROJECT_CACHE = "project-cache";
|
||||
|
||||
|
||||
private static final String POM_FILE_CACHE = "pom-file-cache";
|
||||
|
||||
|
||||
private Map projectCache;
|
||||
|
||||
|
||||
private Map pomFileCache;
|
||||
|
||||
|
||||
public ProjectBuildCache()
|
||||
{
|
||||
this( true );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param liveInstance If false, this instance's state is meant to be retrieved from the build
|
||||
* context. If true, this instance can serve as the authoritative instance where the cache is
|
||||
@ -70,26 +71,26 @@ public ProjectBuildCache( boolean liveInstance )
|
||||
{
|
||||
if ( liveInstance )
|
||||
{
|
||||
projectCache = new HashMap();
|
||||
pomFileCache = new HashMap();
|
||||
projectCache = new WeakHashMap();
|
||||
pomFileCache = new WeakHashMap();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void cacheProject( MavenProject project )
|
||||
{
|
||||
projectCache.put( generateCacheKey( project ), project );
|
||||
}
|
||||
|
||||
|
||||
public MavenProject getCachedProject( String groupId, String artifactId, String version )
|
||||
{
|
||||
return (MavenProject) projectCache.get( generateCacheKey( groupId, artifactId, version ) );
|
||||
}
|
||||
|
||||
|
||||
public MavenProject getCachedProject( Artifact artifact )
|
||||
{
|
||||
return (MavenProject) projectCache.get( generateCacheKey( artifact ) );
|
||||
}
|
||||
|
||||
|
||||
public MavenProject getCachedProject( MavenProject exampleInstance )
|
||||
{
|
||||
return (MavenProject) projectCache.get( generateCacheKey( exampleInstance ) );
|
||||
@ -99,7 +100,7 @@ public void cacheModelFileForModel( File modelFile, Model model )
|
||||
{
|
||||
pomFileCache.put( generateCacheKey( model ), modelFile );
|
||||
}
|
||||
|
||||
|
||||
public File getCachedModelFile( Artifact artifact )
|
||||
{
|
||||
return (File) pomFileCache.get( generateCacheKey( artifact ) );
|
||||
@ -118,10 +119,10 @@ public File getCachedModelFile( String groupId, String artifactId, String versio
|
||||
public Map getData()
|
||||
{
|
||||
Map data = new HashMap( 2 );
|
||||
|
||||
|
||||
data.put( PROJECT_CACHE, projectCache );
|
||||
data.put( POM_FILE_CACHE, pomFileCache );
|
||||
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -132,8 +133,8 @@ public String getStorageKey()
|
||||
|
||||
public void setData( Map data )
|
||||
{
|
||||
this.projectCache = (Map) data.get( PROJECT_CACHE );
|
||||
this.pomFileCache = (Map) data.get( POM_FILE_CACHE );
|
||||
projectCache = (Map) data.get( PROJECT_CACHE );
|
||||
pomFileCache = (Map) data.get( POM_FILE_CACHE );
|
||||
}
|
||||
|
||||
public void store( BuildContextManager buildContextManager )
|
||||
@ -146,11 +147,11 @@ public void store( BuildContextManager buildContextManager )
|
||||
public static ProjectBuildCache read( BuildContextManager buildContextManager )
|
||||
{
|
||||
BuildContext buildContext = buildContextManager.readBuildContext( true );
|
||||
|
||||
|
||||
ProjectBuildCache cache = new ProjectBuildCache();
|
||||
|
||||
|
||||
buildContext.retrieve( cache );
|
||||
|
||||
|
||||
return cache;
|
||||
}
|
||||
|
||||
@ -160,7 +161,7 @@ private static String generateCacheKey( Model model )
|
||||
|
||||
String groupId = model.getGroupId();
|
||||
|
||||
if ( groupId == null && modelParent != null )
|
||||
if ( ( groupId == null ) && ( modelParent != null ) )
|
||||
{
|
||||
groupId = modelParent.getGroupId();
|
||||
}
|
||||
@ -169,29 +170,29 @@ private static String generateCacheKey( Model model )
|
||||
|
||||
String version = model.getVersion();
|
||||
|
||||
if ( version == null && modelParent != null )
|
||||
if ( ( version == null ) && ( modelParent != null ) )
|
||||
{
|
||||
version = modelParent.getVersion();
|
||||
}
|
||||
|
||||
return generateCacheKey( groupId, artifactId, version );
|
||||
}
|
||||
|
||||
|
||||
private static String generateCacheKey( Parent parent )
|
||||
{
|
||||
return generateCacheKey( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
|
||||
}
|
||||
|
||||
|
||||
private static String generateCacheKey( Artifact artifact )
|
||||
{
|
||||
return generateCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
|
||||
}
|
||||
|
||||
|
||||
private static String generateCacheKey( MavenProject project )
|
||||
{
|
||||
return generateCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
|
||||
}
|
||||
|
||||
|
||||
private static String generateCacheKey( String groupId, String artifactId, String version )
|
||||
{
|
||||
return groupId + ":" + artifactId + ":" + version;
|
||||
|
@ -55,15 +55,15 @@ public void testProjectInheritance()
|
||||
{
|
||||
File localRepo = getLocalRepositoryPath();
|
||||
File pom0 = new File( localRepo, "p0/pom.xml" );
|
||||
|
||||
|
||||
File pom0Basedir = pom0.getParentFile();
|
||||
|
||||
|
||||
File pom1 = new File( pom0Basedir, "p1/pom.xml" );
|
||||
|
||||
|
||||
// load everything...
|
||||
MavenProject project0 = getProject( pom0 );
|
||||
MavenProject project1 = getProject( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@
|
||||
/**
|
||||
* Verifies the version of a dependency listed in a parent's
|
||||
* dependencyManagement section is chosen over another version of the same
|
||||
* dependency, listed transitively.
|
||||
* dependency, listed transitively.
|
||||
*
|
||||
* @author <a href="mailto:pschneider@gmail.com">Patrick Schneider</a>
|
||||
* @version $Id$
|
||||
@ -65,12 +65,12 @@ public void testDependencyManagementOverridesTransitiveDependencyVersion()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
Set set = project1.getArtifacts();
|
||||
assertNotNull("No artifacts", set);
|
||||
assertTrue("No Artifacts", set.size() > 0);
|
||||
assertTrue("Set size should be 3, is " + set.size(), set.size() == 3);
|
||||
|
||||
|
||||
Iterator iter = set.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Artifact artifact = (Artifact)iter.next();
|
||||
|
@ -61,7 +61,7 @@ public void testDependencyManagement()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
Set set = project1.getArtifacts();
|
||||
assertNotNull("No artifacts", set);
|
||||
assertTrue("No Artifacts", set.size() > 0);
|
||||
|
@ -61,7 +61,7 @@ public void testDependencyManagement()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
Set set = project1.getArtifacts();
|
||||
assertNotNull("No artifacts", set);
|
||||
assertTrue("No Artifacts", set.size() > 0);
|
||||
|
@ -19,22 +19,13 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.MailingList;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.PluginExecution;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.logging.LoggerManager;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* A test which demonstrates maven's dependency management
|
||||
@ -70,14 +61,14 @@ public void testDependencyManagement()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
System.out.println("Project " + project1.getId() + " " + project1);
|
||||
Set set = project1.getArtifacts();
|
||||
assertNotNull("No artifacts", set);
|
||||
assertTrue("No Artifacts", set.size() > 0);
|
||||
Iterator iter = set.iterator();
|
||||
assertTrue("Set size should be 3, is " + set.size(), set.size() == 3);
|
||||
|
||||
|
||||
while (iter.hasNext())
|
||||
{
|
||||
Artifact artifact = (Artifact)iter.next();
|
||||
|
@ -61,14 +61,14 @@ public void testDependencyManagement()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
System.out.println("Project " + project1.getId() + " " + project1);
|
||||
Set set = project1.getArtifacts();
|
||||
assertNotNull("No artifacts", set);
|
||||
assertTrue("No Artifacts", set.size() > 0);
|
||||
Iterator iter = set.iterator();
|
||||
assertTrue("Set size should be 4, is " + set.size(), set.size() == 4);
|
||||
|
||||
|
||||
while (iter.hasNext())
|
||||
{
|
||||
Artifact artifact = (Artifact)iter.next();
|
||||
|
@ -18,23 +18,11 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.MailingList;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.PluginExecution;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.logging.LoggerManager;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Verifies exclusions listed in dependencyManagement are valid for
|
||||
@ -59,7 +47,7 @@ public class ProjectInheritanceTest
|
||||
|
||||
/**
|
||||
* How the test project is set up:
|
||||
*
|
||||
*
|
||||
* 1. dependencyManagement lists dependencies on a & b,
|
||||
* with an exclusion on c in b.
|
||||
* 2. the child project lists a dependency on project a only
|
||||
@ -82,13 +70,13 @@ public void testDependencyManagementExclusionsExcludeTransitively()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
Map map = project1.getArtifactMap();
|
||||
|
||||
assertNotNull("No artifacts", map);
|
||||
assertTrue("No Artifacts", map.size() > 0);
|
||||
assertTrue("Set size should be 2, is " + map.size(), map.size() == 2);
|
||||
|
||||
|
||||
assertTrue("maven-test:t09-a is not in the project", map.containsKey( "maven-test:t09-a" ));
|
||||
assertTrue("maven-test:t09-b is not in the project", map.containsKey( "maven-test:t09-b" ));
|
||||
|
||||
@ -101,7 +89,7 @@ public void testDependencyManagementExclusionsExcludeTransitively()
|
||||
* project b. We will pick up project c in this case because no
|
||||
* restrictions were placed on d. This demonstrates that a, b, c, & d will
|
||||
* all be collected.
|
||||
*
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testDependencyManagementExclusionDoesNotOverrideGloballyForTransitives()
|
||||
@ -117,7 +105,7 @@ public void testDependencyManagementExclusionDoesNotOverrideGloballyForTransitiv
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project2 = getProjectWithDependencies( pom2 );
|
||||
|
||||
assertEquals( pom0Basedir, project2.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project2.getParent().getBasedir().getCanonicalFile() );
|
||||
Map map = project2.getArtifactMap();
|
||||
assertNotNull( "No artifacts", map );
|
||||
assertTrue( "No Artifacts", map.size() > 0 );
|
||||
|
@ -19,29 +19,18 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.MailingList;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.PluginExecution;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.logging.LoggerManager;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Verifies scope inheritence of direct and transitive dependencies.
|
||||
*
|
||||
*
|
||||
* Should show three behaviors:
|
||||
*
|
||||
*
|
||||
* 1. dependencyManagement should override the scope of transitive dependencies.
|
||||
* 2. Direct dependencies should override the scope of dependencyManagement.
|
||||
* 3. Direct dependencies should inherit scope from dependencyManagement when
|
||||
@ -77,27 +66,27 @@ public void testDependencyManagementOverridesTransitiveDependencyVersion()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
System.out.println("Project " + project1.getId() + " " + project1);
|
||||
Map map = project1.getArtifactMap();
|
||||
assertNotNull("No artifacts", map);
|
||||
assertTrue("No Artifacts", map.size() > 0);
|
||||
assertTrue("Set size should be 3, is " + map.size(), map.size() == 3);
|
||||
|
||||
|
||||
Artifact a = (Artifact) map.get("maven-test:t10-a");
|
||||
Artifact b = (Artifact) map.get("maven-test:t10-b");
|
||||
Artifact c = (Artifact) map.get("maven-test:t10-c");
|
||||
|
||||
|
||||
assertNotNull( a );
|
||||
assertNotNull( b );
|
||||
assertNotNull( c );
|
||||
|
||||
// inherited from depMgmt
|
||||
assertTrue("Incorrect scope for " + a.getDependencyConflictId(), a.getScope().equals("test"));
|
||||
|
||||
|
||||
// transitive dep, overridden b depMgmt
|
||||
assertTrue("Incorrect scope for " + b.getDependencyConflictId(), b.getScope().equals("runtime"));
|
||||
|
||||
|
||||
// direct dep, overrides depMgmt
|
||||
assertTrue("Incorrect scope for " + c.getDependencyConflictId(), c.getScope().equals("runtime"));
|
||||
|
||||
|
@ -19,23 +19,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.MailingList;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.PluginExecution;
|
||||
import org.apache.maven.model.Dependency;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.logging.LoggerManager;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Verifies scope of root project is preserved regardless of parent depenedency management.
|
||||
@ -71,7 +58,7 @@ public void testDependencyManagementDoesNotOverrideScopeOfCurrentArtifact()
|
||||
MavenProject project0 = getProjectWithDependencies( pom0 );
|
||||
MavenProject project1 = getProjectWithDependencies( pom1 );
|
||||
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir() );
|
||||
assertEquals( pom0Basedir, project1.getParent().getBasedir().getCanonicalFile() );
|
||||
assertNull( "dependencyManagement has overwritten the scope of the currently building child project",
|
||||
project1.getArtifact().getScope() );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user