[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[equinox-dev] EclipseStarter.searchFor() - expected JAR naming scheme

At present, EclipseStarter.searchFor() looks for JAR files given some
target name, which can be

 o the entire file name
 o the file's base name minus the ".jar" extension
 o the prefix of a base name, followed by an underscore that
   introduces a version tuple

The third one is clever and convenient, but I found that it conflicts
with Maven's preferred JAR naming scheme. Maven separates the
artifactId from the version tuple by a dash or hyphen.

With the small change attached, we could use Maven-generated artifacts
named by their artifactId and have them properly discovered.

-- 
Steven E. Harris
--- EclipseStarter.java.orig	2007-02-15 10:13:39.417750000 -0800
+++ EclipseStarter.java	2007-02-15 10:35:22.839625000 -0800
@@ -1232,20 +1232,20 @@
 			if (!name.startsWith(target))
 				continue;
 			boolean simpleJar = false;
-			if (name.length() > target.length() && name.charAt(target.length()) != '_') {
-				// make sure this is not just a jar with no _version tacked on the end
-				if (name.length() == 4 + target.length() && name.endsWith(".jar")) //$NON-NLS-1$
-					simpleJar = true;
-				else
-					// name does not match the target properly with an _version at the end
-					continue;
-			}
-			String version = ""; //$NON-NLS-1$ // Note: directory with version suffix is always > than directory without version suffix
-			int index = name.indexOf('_');
-			if (index != -1)
-				version = name.substring(index + 1);
-			Object[] currentVersion = getVersionElements(version);
-			File candidate = new File(start, candidates[i]);
+            final char sep = name.charAt(target.length());
+            if ( sep != '_' && sep != '-' ) {
+                // make sure this is not just a jar with no (_|-)version tacked on the end
+                if (name.length() == 4 + target.length() && name.endsWith(".jar")) //$NON-NLS-1$
+                    simpleJar = true;
+                else
+                    // name does not match the target properly with a (_|-)version at the end
+                    continue;
+            }
+			final String version = simpleJar ?
+                "" : //$NON-NLS-1$ // Note: directory with version suffix is always > than directory without version suffix
+                name.substring(target.length() + 1);
+			final Object[] currentVersion = getVersionElements(version);
+			final File candidate = new File(start, name);
 			if (compareVersion(maxVersion, currentVersion) < 0) {
 				result = candidate.getAbsolutePath();
 				// if simple jar; make sure it is really a file before accepting it
@@ -1253,9 +1253,8 @@
 					maxVersion = currentVersion;
 			}
 		}
-		if (result == null)
-			return null;
-		return result.replace(File.separatorChar, '/') + "/"; //$NON-NLS-1$
+		return result == null ? null :
+            result.replace(File.separatorChar, '/') + "/"; //$NON-NLS-1$
 	}
 
 	/**