You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ma...@apache.org on 2012/05/22 13:38:54 UTC
svn commit: r1341416 - in /maven/shared/trunk/maven-runtime/src:
main/java/org/apache/maven/shared/runtime/
test/java/org/apache/maven/shared/runtime/ test/resources/testDependentJars2/
test/resources/testDependentJars2/project1/ test/resources/testDep...
Author: markh
Date: Tue May 22 11:38:54 2012
New Revision: 1341416
URL: http://svn.apache.org/viewvc?rev=1341416&view=rev
Log:
[MSHARED-165] Mediate dependency versions for stricter Maven3 ProjectSorter
o Set all project dependency versions to the corresponding version discovered at runtime now that Maven3's ProjectSorter considers versions
Added:
maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java (with props)
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml (with props)
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml (with props)
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml (with props)
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/
maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml (with props)
Modified:
maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/XMLMavenRuntimeVisitor.java
maven/shared/trunk/maven-runtime/src/test/java/org/apache/maven/shared/runtime/DefaultMavenRuntimeTest.java
Added: maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java?rev=1341416&view=auto
==============================================================================
--- maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java (added)
+++ maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java Tue May 22 11:38:54 2012
@@ -0,0 +1,108 @@
+package org.apache.maven.shared.runtime;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Utility methods for working with Maven projects.
+ *
+ * @author <a href="mailto:markh@apache.org">Mark Hobson</a>
+ * @version $Id$
+ * @see MavenProject
+ */
+final class MavenProjectUtils
+{
+ // constructors -----------------------------------------------------------
+
+ private MavenProjectUtils()
+ {
+ throw new AssertionError();
+ }
+
+ // public methods ---------------------------------------------------------
+
+ /**
+ * Aligns dependency versions to their corresponding project version for the specified projects.
+ *
+ * @param projects the projects whose dependency versions to align
+ */
+ public static void mediateDependencyVersions( List<MavenProject> projects )
+ {
+ Map<String, String> versionsByProjectId = getVersionsByProjectId( projects );
+
+ for ( MavenProject project : projects )
+ {
+ mediateProject( project, versionsByProjectId );
+ }
+ }
+
+ // private methods --------------------------------------------------------
+
+ private static void mediateProject( MavenProject project, Map<String, String> versionsByProjectId )
+ {
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ mediateDependency( dependency, versionsByProjectId );
+ }
+ }
+
+ private static void mediateDependency( Dependency dependency, Map<String, String> versionsByProjectId )
+ {
+ String projectId = versionlessKey( dependency );
+ String version = versionsByProjectId.get( projectId );
+
+ if ( version != null )
+ {
+ dependency.setVersion( version );
+ }
+ }
+
+ private static Map<String, String> getVersionsByProjectId( List<MavenProject> projects )
+ {
+ Map<String, String> versionsByProjectId = new HashMap<String, String>();
+
+ for ( MavenProject project : projects )
+ {
+ String projectId = versionlessKey( project );
+ String version = project.getVersion();
+
+ versionsByProjectId.put( projectId, version );
+ }
+
+ return versionsByProjectId;
+ }
+
+ private static String versionlessKey( MavenProject project )
+ {
+ return ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+ }
+
+ private static String versionlessKey( Dependency dependency )
+ {
+ return ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
+ }
+}
Propchange: maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/MavenProjectUtils.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/XMLMavenRuntimeVisitor.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/XMLMavenRuntimeVisitor.java?rev=1341416&r1=1341415&r2=1341416&view=diff
==============================================================================
--- maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/XMLMavenRuntimeVisitor.java (original)
+++ maven/shared/trunk/maven-runtime/src/main/java/org/apache/maven/shared/runtime/XMLMavenRuntimeVisitor.java Tue May 22 11:38:54 2012
@@ -103,9 +103,13 @@ class XMLMavenRuntimeVisitor implements
*/
public List<MavenProject> getSortedProjects() throws MavenRuntimeException
{
+ // mediate dependency versions since declared versions can differ from runtime versions
+ List<MavenProject> mediatedProjects = new ArrayList<MavenProject>( projects );
+ MavenProjectUtils.mediateDependencyVersions( mediatedProjects );
+
try
{
- ProjectSorter projectSorter = new ProjectSorter( projects );
+ ProjectSorter projectSorter = new ProjectSorter( mediatedProjects );
return genericList( projectSorter.getSortedProjects(), MavenProject.class );
}
Modified: maven/shared/trunk/maven-runtime/src/test/java/org/apache/maven/shared/runtime/DefaultMavenRuntimeTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/test/java/org/apache/maven/shared/runtime/DefaultMavenRuntimeTest.java?rev=1341416&r1=1341415&r2=1341416&view=diff
==============================================================================
--- maven/shared/trunk/maven-runtime/src/test/java/org/apache/maven/shared/runtime/DefaultMavenRuntimeTest.java (original)
+++ maven/shared/trunk/maven-runtime/src/test/java/org/apache/maven/shared/runtime/DefaultMavenRuntimeTest.java Tue May 22 11:38:54 2012
@@ -77,6 +77,7 @@ public class DefaultMavenRuntimeTest ext
packageProject( "testMultipleJars/project2/pom.xml" );
packageProject( "testMultipleJars/project3/pom.xml" );
packageProject( "testDependentJars/pom.xml" );
+ packageProject( "testDependentJars2/pom.xml" );
initialized = true;
}
@@ -588,6 +589,25 @@ public class DefaultMavenRuntimeTest ext
}, projects );
}
+ // MSHARED-165
+ public void testGetSortedProjectsWithMediatedDependency()
+ throws MavenRuntimeException, IOException
+ {
+ File jar1 = getPackage( "testDependentJars2/project1/pom.xml" );
+ File jar2 = getPackage( "testDependentJars/project2/pom.xml" );
+ File jar3 = getPackage( "testDependentJars/project3/pom.xml" );
+
+ URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
+
+ List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
+
+ assertMavenProjects( new String[] {
+ "org.apache.maven.shared.runtime.tests:testDependentJars3:1.0",
+ "org.apache.maven.shared.runtime.tests:testDependentJars1:2.0",
+ "org.apache.maven.shared.runtime.tests:testDependentJars2:1.0"
+ }, projects );
+ }
+
public void testGetSortedProjectsWithMultipleVersions()
throws MavenRuntimeException, IOException
{
Added: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml?rev=1341416&view=auto
==============================================================================
--- maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml (added)
+++ maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml Tue May 22 11:38:54 2012
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars</artifactId>
+ <packaging>pom</packaging>
+ <version>2.0</version>
+
+ <modules>
+ <module>project1</module>
+ <module>project2</module>
+ <module>project3</module>
+ </modules>
+
+</project>
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml?rev=1341416&view=auto
==============================================================================
--- maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml (added)
+++ maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml Tue May 22 11:38:54 2012
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars1</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars3</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+</project>
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project1/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml?rev=1341416&view=auto
==============================================================================
--- maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml (added)
+++ maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml Tue May 22 11:38:54 2012
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars2</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars1</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+</project>
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project2/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml?rev=1341416&view=auto
==============================================================================
--- maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml (added)
+++ maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml Tue May 22 11:38:54 2012
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared.runtime.tests</groupId>
+ <artifactId>testDependentJars3</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+
+</project>
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/shared/trunk/maven-runtime/src/test/resources/testDependentJars2/project3/pom.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision