Author: fgiust Date: Sat Oct 28 14:29:29 2006 New Revision: 468743 URL: http://svn.apache.org/viewvc?view=rev&rev=468743 Log: add qualifiers to version ranges when stripQualifier is false
Modified: maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java Modified: maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java?view=diff&rev=468743&r1=468742&r2=468743 ============================================================================== --- maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java (original) +++ maven/plugins/trunk/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/MakeArtifactsMojo.java Sat Oct 28 14:29:29 2006 @@ -77,11 +77,16 @@ { /** - * A pattern te <code>deployTo</code> param should match. + * A pattern the <code>deployTo</code> param should match. */ private static final Pattern DEPLOYTO_PATTERN = Pattern.compile( "(.+)::(.+)::(.+)" ); /** + * A pattern for a 3 digit osgi version number. + */ + private static final Pattern VERSION_PATTERN = Pattern.compile( "(([0-9]+\\.)+[0-9]+)" ); + + /** * Plexus container, needed to manually lookup components for deploy of artifacts. */ private PlexusContainer container; @@ -313,7 +318,7 @@ } String requireBundle = manifestEntries.getValue( "Require-Bundle" ); - Dependency[] deps = parseDependencies( requireBundle ); + Dependency[] deps = parseDependencies( requireBundle, !this.stripQualifier ); String groupId = null; groupId = createGroupId( artifactId ); @@ -485,9 +490,11 @@ /** * Parses the "Require-Bundle" and convert it to a list of dependencies. * @param requireBundle "Require-Bundle" entry + * @param addQualifier if true, a 4th version digit is added to dependency versions. This is required for maven to + * allow dependencies with a qualifier to match the version range. * @return an array of <code>Dependency</code> */ - protected Dependency[] parseDependencies( String requireBundle ) + protected Dependency[] parseDependencies( String requireBundle, boolean addQualifier ) { if ( requireBundle == null ) { @@ -529,10 +536,15 @@ } } + if ( addQualifier ) + { + version = addQualifierToVersionsInRange( version ); + } + if ( version == null ) { getLog().info( "Missing version for artifact " + artifactId + ", assuming any version > 0" ); - version = "[0,)"; + version = "[0.0.0.0,)"; } Dependency dep = new Dependency(); @@ -546,6 +558,35 @@ return (Dependency[]) dependencies.toArray( new Dependency[dependencies.size()] ); + } + + /** + * Adds a qualifier (4th digit) to each version in a range. This is needed in maven poms in order to make dependency + * ranges work when using qualifiers while generating artifacts. + * In maven the range <code>[3.2.0,4.0.0)</code> doesn't match version <code>3.2.100.v20060905</code>, while + * <code>[3.2.0.0,4.0.0.0)</code> do. + * @param versionRange input range + * @return modified version range + */ + protected String addQualifierToVersionsInRange( String versionRange ) + { + StringBuffer newVersionRange = new StringBuffer(); + + Matcher matcher = VERSION_PATTERN.matcher( versionRange ); + + while ( matcher.find() ) + { + String currentVersion = matcher.group(); + int digitsToAdd = 3 - StringUtils.countMatches( currentVersion, "." ); + if ( digitsToAdd > 0 ) + { + matcher.appendReplacement( newVersionRange, matcher.group() + ".0" ); + } + } + + matcher.appendTail( newVersionRange ); + + return newVersionRange.toString(); } /** Modified: maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java?view=diff&rev=468743&r1=468742&r2=468743 ============================================================================== --- maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java (original) +++ maven/plugins/trunk/maven-eclipse-plugin/src/test/java/org/apache/maven/plugin/eclipse/MakeArtifactsTest.java Sat Oct 28 14:29:29 2006 @@ -49,7 +49,7 @@ { Dependency[] deps = mojo.parseDependencies( "org.eclipse.ui;bundle-version=\"[3.2.0,4.0.0)\"," + "org.eclipse.ui.console;resolution:=\"optional\";bundle-version=\"[3.1.100,4.0.0)\",org.eclipse.help;" - + "bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\"" ); + + "bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\"", false ); assertEquals( 4, deps.length ); assertEquals( "org.eclipse.ui", deps[0].getArtifactId() ); @@ -61,7 +61,41 @@ assertEquals( "org.eclipse.core.expressions", deps[3].getArtifactId() ); assertEquals( "[3.2.0,4.0.0)", deps[3].getVersion() ); } - + + /** + * Tests the parsing of the "Require-Bundle" entry from a manifest. + */ + public void testParseDependenciesWithQualifier() + { + Dependency[] deps = mojo.parseDependencies( "org.eclipse.ui;bundle-version=\"[3.2.0,4.0.0)\"," + + "org.eclipse.ui.console;resolution:=\"optional\";bundle-version=\"[3.1.100,4.0.0)\",org.eclipse.help;" + + "bundle-version=\"[3.2.0,4.0.0)\",org.eclipse.core.expressions;bundle-version=\"[3.2.0,4.0.0)\"", true ); + + assertEquals( 4, deps.length ); + assertEquals( "org.eclipse.ui", deps[0].getArtifactId() ); + assertEquals( "[3.2.0.0,4.0.0.0)", deps[0].getVersion() ); + assertEquals( "org.eclipse.ui.console", deps[1].getArtifactId() ); + assertEquals( "[3.1.100.0,4.0.0.0)", deps[1].getVersion() ); + assertEquals( "org.eclipse.help", deps[2].getArtifactId() ); + assertEquals( "[3.2.0.0,4.0.0.0)", deps[2].getVersion() ); + assertEquals( "org.eclipse.core.expressions", deps[3].getArtifactId() ); + assertEquals( "[3.2.0.0,4.0.0.0)", deps[3].getVersion() ); + } + + /** + * Tests for addQualifierToVersionsInRange() + * + */ + public void testAddQualifierToVersionsInRange() + { + assertEquals( "[3.2.0.0,4.0.0.0)", mojo.addQualifierToVersionsInRange( "[3.2.0,4.0.0)" ) ); + assertEquals( "[,4.0.0.0)", mojo.addQualifierToVersionsInRange( "[,4.0.0)" ) ); + assertEquals( "[3.2.0.0,4.0.0.0)", mojo.addQualifierToVersionsInRange( "[3.2.0.0,4.0.0.0)" ) ); + } + + /** + * Test the generation of a groupId from a bundle symbolic name. + */ public void testCreateGroupId() { assertEquals( "test", mojo.createGroupId( "test" ) );