Author: kenney Date: Sun Jul 9 20:31:30 2006 New Revision: 420408 URL: http://svn.apache.org/viewvc?rev=420408&view=rev Log: Refactored the bootstrapper to use a proper Model and inheritance/dependency chains so repositories defined in models are used for metadata too. Previously they got lost because of all the cloning.
Added: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java (with props) maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java (with props) Modified: maven/components/trunk/bootstrap/bootstrap-installer/src/main/java/org/apache/maven/bootstrap/installer/BootstrapInstaller.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/Bootstrap.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/DownloadFailedException.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/OnlineArtifactDownloader.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Dependency.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ModelReader.java maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/util/AbstractReader.java Modified: maven/components/trunk/bootstrap/bootstrap-installer/src/main/java/org/apache/maven/bootstrap/installer/BootstrapInstaller.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-installer/src/main/java/org/apache/maven/bootstrap/installer/BootstrapInstaller.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-installer/src/main/java/org/apache/maven/bootstrap/installer/BootstrapInstaller.java (original) +++ maven/components/trunk/bootstrap/bootstrap-installer/src/main/java/org/apache/maven/bootstrap/installer/BootstrapInstaller.java Sun Jul 9 20:31:30 2006 @@ -18,7 +18,7 @@ import org.apache.maven.bootstrap.Bootstrap; import org.apache.maven.bootstrap.model.Dependency; -import org.apache.maven.bootstrap.model.ModelReader; +import org.apache.maven.bootstrap.model.Model; import org.apache.maven.bootstrap.util.FileUtils; import org.apache.maven.bootstrap.util.SimpleArgumentParser; import org.codehaus.plexus.util.Expand; @@ -29,15 +29,11 @@ import org.codehaus.plexus.util.cli.WriterStreamConsumer; import java.io.File; -import java.io.BufferedReader; -import java.io.InputStreamReader; import java.io.IOException; import java.io.PrintWriter; -import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.Iterator; -import java.util.Properties; /** * Main class for bootstrap module. @@ -121,7 +117,7 @@ bootstrapper.buildProject( new File( basedir ), true ); - ModelReader mavenCliModel = bootstrapper.getCachedModel( "org.apache.maven", "maven-cli" ); + Model mavenCliModel = bootstrapper.getCachedModel( "org.apache.maven", "maven-cli" ); File installation = new File( basedir, "bootstrap/target/installation" ); createInstallation( installation, mavenCliModel ); @@ -225,7 +221,7 @@ } } - private void createInstallation( File dir, ModelReader mavenCliModel ) + private void createInstallation( File dir, Model mavenCliModel ) throws IOException, CommandLineException, InterruptedException { FileUtils.deleteDirectory( dir ); @@ -243,7 +239,7 @@ File bootDirectory = new File( coreDirectory, "boot" ); bootDirectory.mkdir(); - for ( Iterator i = mavenCliModel.getDependencies().iterator(); i.hasNext(); ) + for ( Iterator i = mavenCliModel.getAllDependencies().iterator(); i.hasNext(); ) { Dependency dep = (Dependency) i.next(); Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/Bootstrap.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/Bootstrap.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/Bootstrap.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/Bootstrap.java Sun Jul 9 20:31:30 2006 @@ -23,6 +23,7 @@ import org.apache.maven.bootstrap.download.OnlineArtifactDownloader; import org.apache.maven.bootstrap.download.RepositoryMetadata; import org.apache.maven.bootstrap.model.Dependency; +import org.apache.maven.bootstrap.model.Model; import org.apache.maven.bootstrap.model.ModelReader; import org.apache.maven.bootstrap.model.Plugin; import org.apache.maven.bootstrap.model.Repository; @@ -35,7 +36,6 @@ import org.apache.maven.bootstrap.util.SimpleArgumentParser; import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -58,6 +58,8 @@ import java.util.Set; import java.util.TimeZone; +import javax.xml.parsers.ParserConfigurationException; + /** * Main class for bootstrap module. * @@ -136,7 +138,7 @@ String basedir = System.getProperty( "user.dir" ); File pom = new File( basedir, "pom.xml" ); - ModelReader reader = readModel( resolver, pom, true ); + Model reader = readModel( resolver, pom, true ); File jar = buildProject( reader ); if ( "install".equals( goal ) ) @@ -144,7 +146,7 @@ install( reader, pom, jar ); } - for ( Iterator i = reader.getDependencies().iterator(); i.hasNext(); ) + for ( Iterator i = reader.getAllDependencies().iterator(); i.hasNext(); ) { Dependency dep = (Dependency) i.next(); @@ -154,16 +156,16 @@ stats( fullStart, new Date() ); } - private void install( ModelReader reader, File pom, File jar ) + private void install( Model model, File pom, File jar ) throws Exception { - String artifactId = reader.getArtifactId(); + String artifactId = model.getArtifactId(); - String version = reader.getVersion(); + String version = model.getVersion(); - String groupId = reader.getGroupId(); + String groupId = model.getGroupId(); - String type = reader.getPackaging(); + String type = model.getPackaging(); Repository localRepository = resolver.getLocalRepository(); File file = localRepository.getArtifactFile( @@ -173,7 +175,7 @@ FileUtils.copyFile( jar, file ); - installPomFile( reader, pom ); + installPomFile( model, pom ); RepositoryMetadata metadata = new RepositoryMetadata(); metadata.setReleaseVersion( version ); @@ -188,17 +190,17 @@ metadata.write( file ); } - private void installPomFile( ModelReader reader, File source ) + private void installPomFile( Model model, File source ) throws IOException { - String artifactId = reader.getArtifactId(); + String artifactId = model.getArtifactId(); - String version = reader.getVersion(); + String version = model.getVersion(); - String groupId = reader.getGroupId(); + String groupId = model.getGroupId(); Repository localRepository = resolver.getLocalRepository(); - File pom = localRepository.getMetadataFile( groupId, artifactId, version, reader.getPackaging(), + File pom = localRepository.getMetadataFile( groupId, artifactId, version, model.getPackaging(), artifactId + "-" + version + ".pom" ); System.out.println( "Installing POM: " + pom ); @@ -209,9 +211,9 @@ private void cacheModels( File basedir, ArtifactResolver resolver ) throws IOException, ParserConfigurationException, SAXException { - ModelReader reader = readModel( resolver, new File( basedir, "pom.xml" ), false ); + Model model = readModel( resolver, new File( basedir, "pom.xml" ), false ); - for ( Iterator i = reader.getModules().iterator(); i.hasNext(); ) + for ( Iterator i = model.getModules().iterator(); i.hasNext(); ) { String module = (String) i.next(); @@ -232,19 +234,19 @@ File file = new File( basedir, "pom.xml" ); - ModelReader reader = readModel( resolver, file, true ); + Model model = readModel( resolver, file, true ); - String key = reader.getGroupId() + ":" + reader.getArtifactId() + ":" + reader.getPackaging(); + String key = model.getGroupId() + ":" + model.getArtifactId() + ":" + model.getPackaging(); if ( inProgress.contains( key ) ) { return; } - if ( reader.getPackaging().equals( "pom" ) ) + if ( model.getPackaging().equals( "pom" ) ) { if ( buildModules ) { - for ( Iterator i = reader.getModules().iterator(); i.hasNext(); ) + for ( Iterator i = model.getModules().iterator(); i.hasNext(); ) { String module = (String) i.next(); @@ -262,15 +264,15 @@ return; } - buildProject( reader ); + buildProject( model ); inProgress.remove( key ); } - private File buildProject( ModelReader reader ) + private File buildProject( Model model ) throws Exception { - File basedir = reader.getProjectFile().getParentFile(); + File basedir = model.getProjectFile().getParentFile(); String sources = new File( basedir, "src/main/java" ).getAbsolutePath(); @@ -283,11 +285,11 @@ System.out.println( "Analysing dependencies ..." ); - for ( Iterator i = reader.getDependencies().iterator(); i.hasNext(); ) + for ( Iterator i = model.getAllDependencies().iterator(); i.hasNext(); ) { Dependency dep = (Dependency) i.next(); - dep.getRepositories().addAll( reader.getRemoteRepositories() ); + dep.getRepositories().addAll( model.getRepositories() ); if ( modelFileCache.containsKey( dep.getId() ) ) { @@ -295,7 +297,7 @@ } } - resolver.downloadDependencies( reader.getDependencies() ); + resolver.downloadDependencies( model.getAllDependencies() ); System.out.println(); System.out.println(); @@ -312,11 +314,11 @@ // ---------------------------------------------------------------------- File generatedSourcesDirectory = null; - if ( reader.getPlugins().containsKey( MODELLO_PLUGIN_ID ) ) + if ( model.getPlugins().containsKey( MODELLO_PLUGIN_ID ) ) { - Plugin plugin = (Plugin) reader.getPlugins().get( MODELLO_PLUGIN_ID ); + Plugin plugin = (Plugin) model.getPlugins().get( MODELLO_PLUGIN_ID ); - File model = new File( basedir, (String) plugin.getConfiguration().get( "model" ) ); + File modelFile = new File( basedir, (String) plugin.getConfiguration().get( "model" ) ); System.out.println( "Model exists!" ); @@ -337,10 +339,10 @@ Dependency dependency = plugin.asDependencyPom(); resolver.downloadDependencies( Collections.singletonList( dependency ) ); File artifactFile = resolver.getArtifactFile( dependency ); - ModelReader pluginReader = readModel( resolver, artifactFile, true ); + Model pluginReader = readModel( resolver, artifactFile, true ); List dependencies = new ArrayList(); - for ( Iterator i = pluginReader.getDependencies().iterator(); i.hasNext(); ) + for ( Iterator i = pluginReader.getAllDependencies().iterator(); i.hasNext(); ) { Dependency d = (Dependency) i.next(); if ( !d.getGroupId().equals( "org.apache.maven" ) ) @@ -353,11 +355,11 @@ System.out.println( "Generating model bindings for version \'" + modelVersion + "\' from '" + model + "'" ); - generateModelloSources( model.getAbsolutePath(), "java", generatedSourcesDirectory, modelVersion, "false", + generateModelloSources( modelFile.getAbsolutePath(), "java", generatedSourcesDirectory, modelVersion, "false", classLoader ); - generateModelloSources( model.getAbsolutePath(), "xpp3-reader", generatedSourcesDirectory, modelVersion, + generateModelloSources( modelFile.getAbsolutePath(), "xpp3-reader", generatedSourcesDirectory, modelVersion, "false", classLoader ); - generateModelloSources( model.getAbsolutePath(), "xpp3-writer", generatedSourcesDirectory, modelVersion, + generateModelloSources( modelFile.getAbsolutePath(), "xpp3-writer", generatedSourcesDirectory, modelVersion, "false", classLoader ); } @@ -367,7 +369,7 @@ System.out.println( "Compiling sources ..." ); - compile( reader.getDependencies(), sources, classes, null, generatedSourcesDirectory, Dependency.SCOPE_COMPILE, + compile( model.getAllDependencies(), sources, classes, null, generatedSourcesDirectory, Dependency.SCOPE_COMPILE, resolver ); // ---------------------------------------------------------------------- @@ -382,32 +384,32 @@ // Create JAR // ---------------------------------------------------------------------- - File jarFile = createJar( new File( basedir, "pom.xml" ), classes, buildDir, reader ); + File jarFile = createJar( new File( basedir, "pom.xml" ), classes, buildDir, model ); System.out.println( "Packaging " + jarFile + " ..." ); - resolver.addBuiltArtifact( reader.getGroupId(), reader.getArtifactId(), "jar", jarFile ); + resolver.addBuiltArtifact( model.getGroupId(), model.getArtifactId(), "jar", jarFile ); line(); return jarFile; } - private ModelReader readModel( ArtifactResolver resolver, File file, boolean resolveTransitiveDependencies ) + private Model readModel( ArtifactResolver resolver, File file, boolean resolveTransitiveDependencies ) throws ParserConfigurationException, SAXException, IOException { ModelReader reader = new ModelReader( resolver, resolveTransitiveDependencies ); - reader.parse( file ); + Model model = reader.parseModel( file, Collections.EMPTY_LIST ); - resolver.addBuiltArtifact( reader.getGroupId(), reader.getArtifactId(), "pom", file ); + resolver.addBuiltArtifact( model.getGroupId(), model.getArtifactId(), "pom", file ); - String id = reader.getGroupId() + ":" + reader.getArtifactId(); + String id = model.getGroupId() + ":" + model.getArtifactId(); modelFileCache.put( id, file ); - modelCache.put( id, reader ); + modelCache.put( id, model ); - return reader; + return model; } private void line() @@ -415,7 +417,7 @@ System.out.println( "------------------------------------------------------------------" ); } - private File createJar( File pomFile, String classes, String buildDir, ModelReader reader ) + private File createJar( File pomFile, String classes, String buildDir, Model reader ) throws Exception { JarMojo jarMojo = new JarMojo(); @@ -753,9 +755,9 @@ return cl; } - public ModelReader getCachedModel( String groupId, String artifactId ) + public Model getCachedModel( String groupId, String artifactId ) { - return (ModelReader) modelCache.get( groupId + ":" + artifactId ); + return (Model) modelCache.get( groupId + ":" + artifactId ); } public File getArtifactFile( Dependency dep ) Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/DownloadFailedException.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/DownloadFailedException.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/DownloadFailedException.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/DownloadFailedException.java Sun Jul 9 20:31:30 2006 @@ -5,6 +5,7 @@ import java.util.List; import org.apache.maven.bootstrap.model.Dependency; +import org.apache.maven.bootstrap.model.Model; /* * Copyright 2001-2005 The Apache Software Foundation. @@ -49,7 +50,7 @@ for ( Iterator it = dep.getChain().iterator(); it.hasNext(); ) { - Dependency chainDep = (Dependency) it.next(); + Model chainDep = (Model) it.next(); msg += "\n\t" + chainDep; repos.addAll( chainDep.getRepositories() ); } Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/OnlineArtifactDownloader.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/OnlineArtifactDownloader.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/OnlineArtifactDownloader.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/download/OnlineArtifactDownloader.java Sun Jul 9 20:31:30 2006 @@ -17,6 +17,7 @@ */ import org.apache.maven.bootstrap.model.Dependency; +import org.apache.maven.bootstrap.model.Model; import org.apache.maven.bootstrap.model.Repository; import org.apache.maven.bootstrap.util.FileUtils; import org.apache.maven.bootstrap.util.StringUtils; @@ -129,7 +130,7 @@ for ( Iterator i = dep.getChain().iterator(); i.hasNext(); ) { - repositories.addAll( ( (Dependency) i.next() ).getRepositories() ); + repositories.addAll( ( (Model) i.next() ).getRepositories() ); } for ( Iterator i = repositories.iterator(); i.hasNext(); ) Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Dependency.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Dependency.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Dependency.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Dependency.java Sun Jul 9 20:31:30 2006 @@ -16,8 +16,6 @@ * limitations under the License. */ -import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -27,22 +25,14 @@ * * @version $Id$ */ -public class Dependency +public class Dependency extends Model { private String id; - private String version; - private String url; private String jar; - private String artifactId; - - private String groupId; - - private String type = "jar"; - private String scope = SCOPE_COMPILE; private String resolvedVersion; @@ -57,23 +47,18 @@ private Set exclusions = new HashSet(); - private List chain; - - private Collection repositories; - public Dependency( List chain ) { - this.chain = new ArrayList( chain ); - this.chain.add( this ); + super(chain); } public Dependency( String groupId, String artifactId, String version, String type, List chain ) { this( chain ); - this.version = version; - this.artifactId = artifactId; - this.groupId = groupId; - this.type = type; + setVersion( version ); + setArtifactId( artifactId ); + setGroupId( groupId ); + setType( type ); } public void setId( String id ) @@ -91,16 +76,6 @@ return id; } - public void setGroupId( String groupId ) - { - this.groupId = groupId; - } - - public String getGroupId() - { - return groupId; - } - public String getArtifactDirectory() { if ( isValid( getGroupId() ) ) @@ -111,16 +86,6 @@ return getId(); } - public String getArtifactId() - { - return artifactId; - } - - public void setArtifactId( String artifactId ) - { - this.artifactId = artifactId; - } - public String getArtifact() { // If the jar name has been explicty set then use that. This @@ -152,16 +117,6 @@ return artifact; } - public void setVersion( String version ) - { - this.version = version; - } - - public String getVersion() - { - return version; - } - public void setJar( String jar ) { // This is a check we need because of the jelly interpolation @@ -202,12 +157,12 @@ public String getType() { - return type; + return getPackaging(); } public void setType( String type ) { - this.type = type; + setPackaging( type ); } private boolean isValid( String value ) @@ -216,61 +171,11 @@ } - public Collection getRepositories() - { - if ( repositories == null ) - repositories = new ArrayList(); - - return repositories; - } - public String toString() { - return getId() + ":" + getVersion() + ":" + getType(); + return "Dependency[" + getId() + ":" + getVersion() + ":" + getType() + "]"; } - public int hashCode() - { - int result = 17; - result = 37 * result + groupId.hashCode(); - result = 37 * result + artifactId.hashCode(); - result = 37 * result + type.hashCode(); - result = 37 * result + version.hashCode(); - return result; - } - - public boolean equals( Object o ) - { - if ( o == this ) - { - return true; - } - - if ( !( o instanceof Dependency ) ) - { - return false; - } - - Dependency d = (Dependency) o; - - if ( !d.getGroupId().equals( groupId ) ) - { - return false; - } - else if ( !d.getArtifactId().equals( artifactId ) ) - { - return false; - } - else if ( !d.getVersion().equals( version ) ) - { - return false; - } - else if ( !d.getType().equals( type ) ) - { - return false; - } - return true; - } public String getConflictId() { @@ -306,15 +211,10 @@ return exclusions; } - public List getChain() - { - return chain; - } - public Dependency getPomDependency() { - Dependency dep = new Dependency( groupId, artifactId, version, "pom", chain ); - dep.repositories = repositories; + Dependency dep = new Dependency( getGroupId(), getArtifactId(), getVersion(), "pom", getChain() ); + dep.getRepositories().addAll( getRepositories() ); return dep; } @@ -326,5 +226,17 @@ public boolean isOptional() { return optional; + } + + public boolean equals( Object o ) + { + if ( o instanceof Dependency ) + { + return super.equals( o ); + } + else + { + return false; + } } } Added: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java?rev=420408&view=auto ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java (added) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java Sun Jul 9 20:31:30 2006 @@ -0,0 +1,260 @@ +package org.apache.maven.bootstrap.model; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Represents a Model. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Kenney Westerhof</a> + * + */ +public class Model +{ + private Map dependencies = new HashMap(); + + Map parentDependencies = new HashMap(); + + Map transitiveDependencies = new HashMap(); + + private Map plugins = new HashMap(); + + private String artifactId; + + private String version; + + private String groupId; + + private String parentGroupId; + + private String parentArtifactId; + + private String parentVersion; + + private String packaging = "jar"; + + private File pomFile; + + private List modules = new ArrayList(); + + private List resources = new ArrayList(); + + private Set repositories = new HashSet(); + + Map managedDependencies = new HashMap(); + + private List chain; + + public Model() + { + this.chain = new ArrayList(); + } + + public Model( List chain ) + { + this.chain = new ArrayList( chain ); + this.chain.add( this ); + } + + public String getId() + { + return groupId + ":" + artifactId + ":" + packaging + ":" + version; + } + + public String getArtifactId() + { + return artifactId; + } + + public void setArtifactId( String artifactId ) + { + this.artifactId = artifactId; + } + + public String getVersion() + { + return version; + } + + public void setVersion( String version ) + { + this.version = version; + } + + public String getGroupId() + { + return groupId; + } + + public void setGroupId( String groupId ) + { + this.groupId = groupId; + } + + public String getPackaging() + { + return packaging; + } + + public String getParentArtifactId() + { + return parentArtifactId; + } + + public void setParentArtifactId( String artifactId ) + { + this.parentArtifactId = artifactId; + } + + public void setPackaging( String packaging ) + { + this.packaging = packaging; + } + + public String getParentGroupId() + { + return parentGroupId; + } + + public void setParentGroupId( String groupId ) + { + this.parentGroupId = groupId; + } + + public String getParentVersion() + { + return parentVersion; + } + + public void setParentVersion( String version ) + { + this.parentVersion = version; + } + + public Map getPlugins() + { + return plugins; + } + + public List getModules() + { + return modules; + } + + public List getResources() + { + return resources; + } + + public File getProjectFile() + { + return pomFile; + } + + public void setPomFile( File file ) + { + this.pomFile = file; + } + + public Set getRepositories() + { + return repositories; + } + + public Collection getManagedDependencies() + { + Map m = new HashMap(); + m.putAll( managedDependencies ); + return m.values(); + } + + public Collection getAllDependencies() + { + Map m = new HashMap(); + m.putAll( transitiveDependencies ); + m.putAll( parentDependencies ); + m.putAll( dependencies ); + return m.values(); + } + + public List getChain() + { + return chain; + } + + public Map getDependencies() + { + return dependencies; + } + + public String toString() + { + return "Model[" + getId() + "]"; + } + + public int hashCode() + { + int result = 17; + result = 37 * result + groupId.hashCode(); + result = 37 * result + artifactId.hashCode(); + result = 37 * result + packaging.hashCode(); + result = 37 * result + version.hashCode(); + return result; + } + + public boolean equals( Object o ) + { + if ( o == this ) + { + return true; + } + + if ( !( o instanceof Model ) ) + { + return false; + } + + Model d = (Model) o; + + if ( !d.getGroupId().equals( groupId ) ) + { + return false; + } + else if ( !d.getArtifactId().equals( artifactId ) ) + { + return false; + } + else if ( !d.getVersion().equals( version ) ) + { + return false; + } + else if ( !d.getPackaging().equals( packaging ) ) + { + return false; + } + return true; + } + +} Propchange: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/Model.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ModelReader.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ModelReader.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ModelReader.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ModelReader.java Sun Jul 9 20:31:30 2006 @@ -17,22 +17,16 @@ */ import org.apache.maven.bootstrap.download.ArtifactResolver; -import org.apache.maven.bootstrap.download.DownloadFailedException; import org.apache.maven.bootstrap.util.AbstractReader; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; + import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; /** @@ -45,27 +39,7 @@ { private int depth = 0; - private String artifactId; - - private String version; - - private String groupId; - - private String packaging = "jar"; - - private String parentGroupId; - - private String parentArtifactId; - - private String parentVersion; - - private Map dependencies = new HashMap(); - - private List repositories = new ArrayList(); - - private List resources = new ArrayList(); - - private Map managedDependencies = new HashMap(); + private Model model; private Dependency currentDependency; @@ -87,12 +61,6 @@ private final ArtifactResolver resolver; - private static Set inProgress = new HashSet(); - - private Map parentDependencies = new HashMap(); - - private Map transitiveDependencies = new HashMap(); - private boolean insideDependencyManagement = false; private boolean insideReleases; @@ -105,12 +73,8 @@ private final Set excluded; - private final List chain; - private final String inheritedScope; - private Map plugins = new HashMap(); - private boolean insideConfiguration; private boolean insideBuild; @@ -119,15 +83,13 @@ private boolean insidePlugin; - private List modules = new ArrayList(); - public ModelReader( ArtifactResolver resolver, boolean resolveTransitiveDependencies ) { - this( resolver, null, resolveTransitiveDependencies, Collections.EMPTY_SET, Collections.EMPTY_LIST ); + this( resolver, null, resolveTransitiveDependencies, Collections.EMPTY_SET ); } public ModelReader( ArtifactResolver resolver, String inheritedScope, boolean resolveTransitiveDependencies, - Set excluded, List chain ) + Set excluded ) { this.resolver = resolver; @@ -136,34 +98,17 @@ this.excluded = excluded; this.inheritedScope = inheritedScope; - - this.chain = chain; } - public List getRemoteRepositories() + public Model parseModel( File file, List chain ) + throws ParserConfigurationException, SAXException, IOException { - return repositories; - } + this.model = new Model( chain ); + model.setPomFile( file ); - public Collection getDependencies() - { - Map m = new HashMap(); - m.putAll( transitiveDependencies ); - m.putAll( parentDependencies ); - m.putAll( dependencies ); - return m.values(); - } - - public Collection getManagedDependencies() - { - Map m = new HashMap(); - m.putAll( managedDependencies ); - return m.values(); - } + super.parse( file ); - public List getResources() - { - return resources; + return model; } public void startElement( String uri, String localName, String rawName, Attributes attributes ) @@ -180,9 +125,9 @@ } else if ( rawName.equals( "dependency" ) ) { - List newChain = - Collections.singletonList( new Dependency( groupId, artifactId, version, packaging, this.chain ) ); - currentDependency = new Dependency( newChain ); +// List newChain = Collections.singletonList( new Dependency( model.getGroupId(), model.getArtifactId(), model +// .getVersion(), model.getPackaging(), this.chain ) ); + currentDependency = new Dependency( model.getChain() ); insideDependency = true; } @@ -249,42 +194,42 @@ // support both v3 <extend> and v4 <parent> if ( rawName.equals( "parent" ) ) { - if ( parentArtifactId == null || parentArtifactId.trim().length() == 0 ) + if ( model.getParentArtifactId() == null || model.getParentArtifactId().trim().length() == 0 ) { throw new SAXException( "Missing required element in <parent>: artifactId." ); } - if ( parentGroupId == null || parentGroupId.trim().length() == 0 ) + if ( model.getParentGroupId() == null || model.getParentGroupId().trim().length() == 0 ) { throw new SAXException( "Missing required element in <parent>: groupId." ); } - if ( parentVersion == null || parentVersion.trim().length() == 0 ) + if ( model.getParentVersion() == null || model.getParentVersion().trim().length() == 0 ) { throw new SAXException( "Missing required element in <parent>: version." ); } - if ( groupId == null ) + if ( model.getGroupId() == null ) { - groupId = parentGroupId; + model.setGroupId( model.getParentGroupId() ); } - if ( version == null ) + if ( model.getVersion() == null ) { - version = parentVersion; + model.setVersion( model.getParentVersion() ); } // actually, these should be transtive (see MNG-77) - but some projects have circular deps that way - ModelReader p = retrievePom( parentGroupId, parentArtifactId, parentVersion, inheritedScope, false, - excluded, Collections.EMPTY_LIST ); + Model p = ProjectResolver.retrievePom( resolver, model.getParentGroupId(), model.getParentArtifactId(), + model.getParentVersion(), inheritedScope, false, excluded, model.getChain() );//Collections.singletonList( model ) ); - addDependencies( p.getDependencies(), parentDependencies, inheritedScope, excluded ); + ProjectResolver.addDependencies( p.getAllDependencies(), model.parentDependencies, inheritedScope, excluded ); - addDependencies( p.getManagedDependencies(), managedDependencies, inheritedScope, Collections.EMPTY_SET ); + ProjectResolver.addDependencies( p.getManagedDependencies(), model.managedDependencies, inheritedScope, Collections.EMPTY_SET ); - repositories.addAll( p.getRemoteRepositories() ); + model.getRepositories().addAll( p.getRepositories() ); - resources.addAll( p.getResources() ); + model.getResources().addAll( p.getResources() ); insideParent = false; } @@ -294,11 +239,11 @@ if ( insideDependencyManagement ) { - managedDependencies.put( currentDependency.getConflictId(), currentDependency ); + model.managedDependencies.put( currentDependency.getConflictId(), currentDependency ); } else { - dependencies.put( currentDependency.getConflictId(), currentDependency ); + model.getDependencies().put( currentDependency.getConflictId(), currentDependency ); } } else if ( rawName.equals( "exclusion" ) ) @@ -312,19 +257,19 @@ } else if ( rawName.equals( "resource" ) ) { - resources.add( currentResource ); + model.getResources().add( currentResource ); insideResource = false; } else if ( rawName.equals( "repository" ) ) { - repositories.add( currentRepository ); + model.getRepositories().add( currentRepository ); insideRepository = false; } else if ( rawName.equals( "plugin" ) ) { - plugins.put( currentPlugin.getId(), currentPlugin ); + model.getPlugins().put( currentPlugin.getId(), currentPlugin ); insidePlugin = false; } @@ -334,21 +279,21 @@ } else if ( rawName.equals( "module" ) ) { - modules.add( getBodyText() ); + model.getModules().add( getBodyText() ); } else if ( insideParent ) { if ( rawName.equals( "groupId" ) ) { - parentGroupId = getBodyText(); + model.setParentGroupId( getBodyText() ); } else if ( rawName.equals( "artifactId" ) ) { - parentArtifactId = getBodyText(); + model.setParentArtifactId( getBodyText() ); } else if ( rawName.equals( "version" ) ) { - parentVersion = getBodyText(); + model.setParentVersion( getBodyText() ); } } else if ( insideDependency ) @@ -476,27 +421,27 @@ { if ( rawName.equals( "artifactId" ) ) { - artifactId = getBodyText(); + model.setArtifactId( getBodyText() ); } else if ( rawName.equals( "version" ) ) { - version = getBodyText(); + model.setVersion( getBodyText() ); } else if ( rawName.equals( "groupId" ) ) { - groupId = getBodyText(); + model.setGroupId( getBodyText() ); } else if ( rawName.equals( "packaging" ) ) { - packaging = getBodyText(); + model.setPackaging( getBodyText() ); } } if ( depth == 1 ) // model / project { - resolver.addBuiltArtifact( groupId, artifactId, "pom", pomFile ); + resolver.addBuiltArtifact( model.getGroupId(), model.getArtifactId(), "pom", model.getProjectFile() ); - resolveDependencies(); + ProjectResolver.resolveDependencies( resolver, model, resolveTransitiveDependencies, inheritedScope, excluded ); } bodyText = new StringBuffer(); @@ -504,170 +449,4 @@ depth--; } - private void resolveDependencies() - throws SAXException - { - for ( Iterator it = dependencies.values().iterator(); it.hasNext(); ) - { - Dependency dependency = (Dependency) it.next(); - - if ( !excluded.contains( dependency.getConflictId() ) && !dependency.isOptional() ) - { - if ( !dependency.getScope().equals( Dependency.SCOPE_TEST ) || inheritedScope == null ) - { - if ( dependency.getVersion() == null ) - { - Dependency managedDependency = - (Dependency) managedDependencies.get( dependency.getConflictId() ); - if ( managedDependency == null ) - { - throw new NullPointerException( "[" + groupId + ":" + artifactId + ":" + packaging + ":" + - version + "] " + "Dependency " + dependency.getConflictId() + - " is missing a version, and nothing is found in dependencyManagement. " ); - } - dependency.setVersion( managedDependency.getVersion() ); - } - - if ( resolveTransitiveDependencies ) - { - Set excluded = new HashSet( this.excluded ); - excluded.addAll( dependency.getExclusions() ); - - ModelReader p = retrievePom( dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), dependency.getScope(), - resolveTransitiveDependencies, excluded, dependency.getChain() ); - - addDependencies( p.getDependencies(), transitiveDependencies, dependency.getScope(), excluded ); - } - } - } - } - } - - private void addDependencies( Collection dependencies, Map target, String inheritedScope, Set excluded ) - { - for ( Iterator i = dependencies.iterator(); i.hasNext(); ) - { - Dependency d = (Dependency) i.next(); - - // skip test deps - if ( !Dependency.SCOPE_TEST.equals( d.getScope() ) ) - { - // Do we care about runtime here? - if ( Dependency.SCOPE_TEST.equals( inheritedScope ) ) - { - d.setScope( Dependency.SCOPE_TEST ); - } - - if ( !hasDependency( d, target ) && !excluded.contains( d.getConflictId() ) && !d.isOptional() ) - { - if ( !"plexus".equals( d.getGroupId() ) || ( !"plexus-utils".equals( d.getArtifactId() ) && - !"plexus-container-default".equals( d.getArtifactId() ) ) ) - { - target.put( d.getConflictId(), d ); - } - } - } - } - } - - private boolean hasDependency( Dependency d, Map dependencies ) - { - String conflictId = d.getConflictId(); - if ( dependencies.containsKey( conflictId ) ) - { - // We only care about pushing in compile scope dependencies I think - // if not, we'll need to be able to get the original and pick the appropriate scope - if ( d.getScope().equals( Dependency.SCOPE_COMPILE ) ) - { - dependencies.remove( conflictId ); - } - else - { - return true; - } - } - return false; - } - - private ModelReader retrievePom( String groupId, String artifactId, String version, String inheritedScope, - boolean resolveTransitiveDependencies, Set excluded, List chain ) - throws SAXException - { - String key = groupId + ":" + artifactId + ":" + version; - - if ( inProgress.contains( key ) ) - { - throw new SAXException( "Circular dependency found, looking for " + key + "\nIn progress:" + inProgress ); - } - - inProgress.add( key ); - - ModelReader p = new ModelReader( resolver, inheritedScope, resolveTransitiveDependencies, excluded, chain ); - - try - { - Dependency pom = new Dependency( groupId, artifactId, version, "pom", chain ); - pom.getRepositories().addAll( repositories ); - for ( Iterator it = chain.iterator(); it.hasNext(); ) - { - pom.getRepositories().addAll( ( (Dependency) it.next() ).getRepositories() ); - } - - resolver.downloadDependencies( Collections.singletonList( pom ) ); - - p.parse( resolver.getArtifactFile( pom ) ); - } - catch ( IOException e ) - { - throw new SAXException( "Error getting parent POM", e ); - } - catch ( ParserConfigurationException e ) - { - throw new SAXException( "Error getting parent POM", e ); - } - catch ( DownloadFailedException e ) - { - throw new SAXException( "Error getting parent POM", e ); - } - - inProgress.remove( key ); - - return p; - } - - public String getArtifactId() - { - return artifactId; - } - - public String getVersion() - { - return version; - } - - public String getGroupId() - { - return groupId; - } - - public String getPackaging() - { - return packaging; - } - - public Map getPlugins() - { - return plugins; - } - - public List getModules() - { - return modules; - } - - public File getProjectFile() - { - return pomFile; - } } Added: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java?rev=420408&view=auto ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java (added) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java Sun Jul 9 20:31:30 2006 @@ -0,0 +1,181 @@ +package org.apache.maven.bootstrap.model; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +import org.apache.maven.bootstrap.download.ArtifactResolver; +import org.apache.maven.bootstrap.download.DownloadFailedException; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * Utility class for resolving Model dependencies. + * + */ +public final class ProjectResolver +{ + private static Set inProgress = new HashSet(); + + private ProjectResolver() + { + + } + + public static void resolveDependencies( ArtifactResolver resolver, Model model, + boolean resolveTransitiveDependencies, String inheritedScope, Set excluded ) + throws SAXException + { + for ( Iterator it = model.getDependencies().values().iterator(); it.hasNext(); ) + { + Dependency dependency = (Dependency) it.next(); + + if ( !excluded.contains( dependency.getConflictId() ) && !dependency.isOptional() ) + { + if ( !dependency.getScope().equals( Dependency.SCOPE_TEST ) || inheritedScope == null ) + { + if ( dependency.getVersion() == null ) + { + Dependency managedDependency = (Dependency) model.managedDependencies.get( dependency + .getConflictId() ); + + if ( managedDependency == null ) + { + throw new NullPointerException( "[" + model.getId() + "] " + "Dependency " + + dependency.getConflictId() + + " is missing a version, and nothing is found in dependencyManagement. " ); + } + dependency.setVersion( managedDependency.getVersion() ); + } + + if ( resolveTransitiveDependencies ) + { + Set excluded2 = new HashSet( excluded ); + excluded2.addAll( dependency.getExclusions() ); + + Model p = retrievePom( resolver, dependency.getGroupId(), dependency.getArtifactId(), + dependency.getVersion(), dependency.getScope(), + resolveTransitiveDependencies, excluded2, dependency.getChain() ); + + addDependencies( p.getAllDependencies(), model.transitiveDependencies, dependency.getScope(), + excluded2 ); + } + } + } + } + } + + public static void addDependencies( Collection dependencies, Map target, String inheritedScope, Set excluded ) + { + for ( Iterator i = dependencies.iterator(); i.hasNext(); ) + { + Dependency d = (Dependency) i.next(); + + // skip test deps + if ( !Dependency.SCOPE_TEST.equals( d.getScope() ) ) + { + // Do we care about runtime here? + if ( Dependency.SCOPE_TEST.equals( inheritedScope ) ) + { + d.setScope( Dependency.SCOPE_TEST ); + } + + if ( !hasDependency( d, target ) && !excluded.contains( d.getConflictId() ) && !d.isOptional() ) + { + if ( !"plexus".equals( d.getGroupId() ) + || ( !"plexus-utils".equals( d.getArtifactId() ) && !"plexus-container-default".equals( d + .getArtifactId() ) ) ) + { + target.put( d.getConflictId(), d ); + } + } + } + } + } + + private static boolean hasDependency( Dependency d, Map dependencies ) + { + String conflictId = d.getConflictId(); + if ( dependencies.containsKey( conflictId ) ) + { + // We only care about pushing in compile scope dependencies I think + // if not, we'll need to be able to get the original and pick the appropriate scope + if ( d.getScope().equals( Dependency.SCOPE_COMPILE ) ) + { + dependencies.remove( conflictId ); + } + else + { + return true; + } + } + return false; + } + + public static Model retrievePom( ArtifactResolver resolver, String groupId, String artifactId, String version, + String inheritedScope, boolean resolveTransitiveDependencies, Set excluded, + List chain ) + throws SAXException + { + String key = groupId + ":" + artifactId + ":" + version; + + if ( inProgress.contains( key ) ) + { + throw new SAXException( "Circular dependency found, looking for " + key + "\nIn progress:" + inProgress ); + } + + inProgress.add( key ); + + ModelReader p = new ModelReader( resolver, inheritedScope, resolveTransitiveDependencies, excluded ); + + try + { + // download the POM + Dependency pom = new Dependency( groupId, artifactId, version, "pom", chain ); + + resolver.downloadDependencies( Collections.singletonList( pom ) ); + + // Parse the POM from the local repository into a model + Model model = p.parseModel( resolver.getArtifactFile( pom ), chain ); + + inProgress.remove( key ); + + return model; + } + catch ( IOException e ) + { + throw new SAXException( "Error getting parent POM", e ); + } + catch ( ParserConfigurationException e ) + { + throw new SAXException( "Error getting parent POM", e ); + } + catch ( DownloadFailedException e ) + { + throw new SAXException( "Error getting parent POM", e ); + } + } +} Propchange: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/model/ProjectResolver.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/util/AbstractReader.java URL: http://svn.apache.org/viewvc/maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/util/AbstractReader.java?rev=420408&r1=420407&r2=420408&view=diff ============================================================================== --- maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/util/AbstractReader.java (original) +++ maven/components/trunk/bootstrap/bootstrap-mini/src/main/java/org/apache/maven/bootstrap/util/AbstractReader.java Sun Jul 9 20:31:30 2006 @@ -40,13 +40,9 @@ { private SAXParserFactory saxFactory; - protected File pomFile; - public void parse( File file ) throws ParserConfigurationException, SAXException, IOException { - pomFile = file; - saxFactory = SAXParserFactory.newInstance(); SAXParser parser = saxFactory.newSAXParser();