You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/02/21 00:49:33 UTC
svn commit: r379290 - in
/maven/components/branches/maven-2.0.x/maven-project/src:
main/java/org/apache/maven/project/
main/java/org/apache/maven/project/inheritance/
test/java/org/apache/maven/project/inheritance/
Author: jdcasey
Date: Mon Feb 20 15:49:31 2006
New Revision: 379290
URL: http://svn.apache.org/viewcvs?rev=379290&view=rev
Log:
[MNG-2006] Merged from trunk. This will allow rewriting of child POM URLs when parent POM is not directly above it in the directory structure.
Modified:
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java
Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=379290&r1=379289&r2=379290&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Mon Feb 20 15:49:31 2006
@@ -686,6 +686,8 @@
project.setOriginalModel( originalModel );
// we don't have to force the collision exception for superModel here, it's already been done in getSuperModel()
+ MavenProject previousProject = superProject;
+
Model previous = superProject.getModel();
for ( Iterator i = lineage.iterator(); i.hasNext(); )
@@ -693,10 +695,22 @@
MavenProject currentProject = (MavenProject) i.next();
Model current = currentProject.getModel();
+
+ String pathAdjustment = null;
+
+ try
+ {
+ pathAdjustment = previousProject.getModulePathAdjustment( currentProject );
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Cannot determine whether " + currentProject.getId() + " is a module of " + previousProject.getId() + ". Reason: " + e.getMessage(), e );
+ }
- modelInheritanceAssembler.assembleModelInheritance( current, previous );
+ modelInheritanceAssembler.assembleModelInheritance( current, previous, pathAdjustment );
previous = current;
+ previousProject = currentProject;
}
// only add the super repository if it wasn't overridden by a profile or project
Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=379290&r1=379289&r2=379290&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Mon Feb 20 15:49:31 2006
@@ -135,6 +135,8 @@
private Build buildOverlay;
private boolean executionRoot;
+
+ private Map moduleFiles;
public MavenProject( Model model )
{
@@ -187,6 +189,44 @@
this.executionRoot = project.executionRoot;
this.artifact = ArtifactUtils.copyArtifact( project.artifact );
+ }
+
+ public String getModulePathAdjustment( MavenProject moduleProject ) throws IOException
+ {
+ File module = moduleProject.getFile();
+
+ if ( module == null )
+ {
+ return null;
+ }
+
+ module = module.getCanonicalFile();
+
+ if ( moduleFiles == null )
+ {
+ moduleFiles = new HashMap();
+
+ List modules = getModules();
+ File myFile = getFile();
+
+ if ( myFile != null )
+ {
+ File myDir = myFile.getCanonicalFile().getParentFile();
+ if ( modules != null )
+ {
+ for ( Iterator it = modules.iterator(); it.hasNext(); )
+ {
+ String modulePath = (String) it.next();
+
+ File moduleFile = new File( myDir, modulePath ).getCanonicalFile();
+
+ moduleFiles.put( moduleFile, modulePath );
+ }
+ }
+ }
+ }
+
+ return (String) moduleFiles.get( module );
}
// ----------------------------------------------------------------------
Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java?rev=379290&r1=379289&r2=379290&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java Mon Feb 20 15:49:31 2006
@@ -16,6 +16,15 @@
* limitations under the License.
*/
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.DependencyManagement;
@@ -29,14 +38,6 @@
import org.apache.maven.project.ModelUtils;
import org.codehaus.plexus.util.StringUtils;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
* @version $Id: DefaultModelInheritanceAssembler.java,v 1.4 2004/08/23 20:24:54
@@ -48,15 +49,20 @@
{
public void copyModel( Model dest, Model source )
{
- assembleModelInheritance( dest, source, false );
+ assembleModelInheritance( dest, source, null, false );
+ }
+
+ public void assembleModelInheritance( Model child, Model parent, String childPathAdjustment )
+ {
+ assembleModelInheritance( child, parent, childPathAdjustment, true );
}
public void assembleModelInheritance( Model child, Model parent )
{
- assembleModelInheritance( child, parent, true );
+ assembleModelInheritance( child, parent, null, true );
}
- private void assembleModelInheritance( Model child, Model parent, boolean appendPaths )
+ private void assembleModelInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
{
// cannot inherit from null parent.
if ( parent == null )
@@ -93,7 +99,7 @@
{
if ( parent.getUrl() != null )
{
- child.setUrl( appendPath( parent.getUrl(), child.getArtifactId(), appendPaths ) );
+ child.setUrl( appendPath( parent.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
else
{
@@ -105,7 +111,7 @@
// Distribution
// ----------------------------------------------------------------------
- assembleDistributionInheritence( child, parent, appendPaths );
+ assembleDistributionInheritence( child, parent, childPathAdjustment, appendPaths );
// issueManagement
if ( child.getIssueManagement() == null )
@@ -126,7 +132,7 @@
}
// Scm
- assembleScmInheritance( child, parent, appendPaths );
+ assembleScmInheritance( child, parent, childPathAdjustment, appendPaths );
// ciManagement
if ( child.getCiManagement() == null )
@@ -399,7 +405,7 @@
}
}
- private void assembleScmInheritance( Model child, Model parent, boolean appendPaths )
+ private void assembleScmInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
{
if ( parent.getScm() != null )
{
@@ -416,7 +422,7 @@
if ( StringUtils.isEmpty( childScm.getConnection() ) && !StringUtils.isEmpty( parentScm.getConnection() ) )
{
- childScm.setConnection( appendPath( parentScm.getConnection(), child.getArtifactId(), appendPaths ) );
+ childScm.setConnection( appendPath( parentScm.getConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
if ( StringUtils.isEmpty( childScm.getDeveloperConnection() ) &&
@@ -424,17 +430,17 @@
{
childScm
.setDeveloperConnection(
- appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(), appendPaths ) );
+ appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
if ( StringUtils.isEmpty( childScm.getUrl() ) && !StringUtils.isEmpty( parentScm.getUrl() ) )
{
- childScm.setUrl( appendPath( parentScm.getUrl(), child.getArtifactId(), appendPaths ) );
+ childScm.setUrl( appendPath( parentScm.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
}
}
- private void assembleDistributionInheritence( Model child, Model parent, boolean appendPaths )
+ private void assembleDistributionInheritence( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
{
if ( parent.getDistributionManagement() != null )
{
@@ -465,7 +471,7 @@
if ( site.getUrl() != null )
{
- site.setUrl( appendPath( site.getUrl(), child.getArtifactId(), appendPaths ) );
+ site.setUrl( appendPath( site.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
}
}
}
@@ -508,23 +514,78 @@
}
}
- private String appendPath( String url, String path, boolean appendPaths )
+ protected String appendPath( String parentPath, String childPath, String pathAdjustment, boolean appendPaths )
{
+ List pathFragments = new ArrayList();
+
+ String rootPath = parentPath;
+
+ String protocol = null;
+ int protocolIdx = rootPath.indexOf( "://" );
+
+ if ( protocolIdx > -1 )
+ {
+ protocol = rootPath.substring( 0, protocolIdx + 3 );
+ rootPath = rootPath.substring( protocolIdx + 3 );
+ }
+
+ pathFragments.add( rootPath );
+
if ( appendPaths )
{
- if ( url.endsWith( "/" ) )
+ if ( pathAdjustment != null )
{
- return url + path;
+ pathFragments.add( pathAdjustment );
}
- else
+
+ pathFragments.add( childPath );
+ }
+
+ StringBuffer cleanedPath = new StringBuffer();
+
+ if ( protocol != null )
+ {
+ cleanedPath.append( protocol );
+ }
+
+ if ( rootPath.startsWith( "/" ) )
+ {
+ cleanedPath.append( '/' );
+ }
+
+ String lastToken = null;
+ String currentToken = null;
+
+ for ( Iterator it = pathFragments.iterator(); it.hasNext(); )
+ {
+ String pathFragment = (String) it.next();
+
+ StringTokenizer tokens = new StringTokenizer( pathFragment, "/" );
+
+ while( tokens.hasMoreTokens() )
{
- return url + "/" + path;
+ lastToken = currentToken;
+ currentToken = tokens.nextToken();
+
+ if ( "..".equals( currentToken ) )
+ {
+ // trim the previous path part off...
+ cleanedPath.setLength( cleanedPath.length() - ( lastToken.length() + 1 ) );
+ }
+ else if ( !".".equals( currentToken ) )
+ {
+ // don't worry about /./ self-references.
+ cleanedPath.append( currentToken ).append( '/' );
+ }
}
}
- else
+
+ if ( !childPath.endsWith( "/" ) && appendPaths )
{
- return url;
+ cleanedPath.setLength( cleanedPath.length() - 1 );
}
+
+ return cleanedPath.toString();
}
}
Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java?rev=379290&r1=379289&r2=379290&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java Mon Feb 20 15:49:31 2006
@@ -26,6 +26,8 @@
{
String ROLE = ModelInheritanceAssembler.class.getName();
+ void assembleModelInheritance( Model child, Model parent, String childPathAdjustment );
+
void assembleModelInheritance( Model child, Model parent );
void copyModel( Model dest, Model source );
Modified: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java
URL: http://svn.apache.org/viewcvs/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java?rev=379290&r1=379289&r2=379290&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java Mon Feb 20 15:49:31 2006
@@ -43,6 +43,19 @@
extends TestCase
{
private ModelInheritanceAssembler assembler = new DefaultModelInheritanceAssembler();
+
+ public void testShouldAppendPathWithChildPathAdjustment()
+ {
+ String parentPath = "http://maven.apache.org/shared/maven-shared-parent";
+ String childPath = "file-management";
+ String pathAdjustment = "..";
+
+ String result = ((DefaultModelInheritanceAssembler) assembler).appendPath( parentPath, childPath, pathAdjustment, true );
+
+ System.out.println( "Resulting path is: \'" + result + "\'" );
+
+ assertEquals( "Append with path adjustment failed.", "http://maven.apache.org/shared/file-management", result );
+ }
public void testShouldOverrideUnitTestExcludesOnly()
{