jvanzyl 02/03/24 14:24:47
Modified: src/java/org/apache/maven ProjectResolver.java
Log:
Modified the project resolver to walk through a base directory looking
for JAR and class files instead of just a single JAR file. I basically
want to make something to unpack a distribution and make a project
descriptor from the contents.
Revision Changes Path
1.5 +70 -33
jakarta-turbine-maven/src/java/org/apache/maven/ProjectResolver.java
Index: ProjectResolver.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-maven/src/java/org/apache/maven/ProjectResolver.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ProjectResolver.java 24 Mar 2002 21:46:13 -0000 1.4
+++ ProjectResolver.java 24 Mar 2002 22:24:47 -0000 1.5
@@ -77,7 +77,7 @@
* in a project descriptor.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
- * @version $Id: ProjectResolver.java,v 1.4 2002/03/24 21:46:13 jvanzyl Exp $
+ * @version $Id: ProjectResolver.java,v 1.5 2002/03/24 22:24:47 jvanzyl Exp $
*/
public class ProjectResolver
{
@@ -85,7 +85,7 @@
* Base directory in which JAR files and class files will
* be searched for.
*/
- private File file;
+ private File baseDirectory;
/**
* Listener that registers class references as they
@@ -111,6 +111,7 @@
{
packageReferences = new LinkedList();
packageExcludes = new LinkedList();
+ treeMapListener = new TreeMapListener();
}
/**
@@ -138,9 +139,9 @@
* @param baseDirectory Directory in which JARs and class files
* are searched for.
*/
- public void setFile(File file)
+ public void setBaseDirectory(File baseDirectory)
{
- this.file = file;
+ this.baseDirectory = baseDirectory;
}
/**
@@ -153,22 +154,49 @@
{
return packageReferences;
}
-
+
/**
* Resolve the package dependencies from the set of JARs
* and classes used as the input.
*/
public void resolveDependencies()
{
+ // Collect all the JAR and class file that we can find
+ // in the baseDirectory.
+
+ String[] files =
+ MavenUtils.getFiles(baseDirectory.getAbsolutePath(), "*.jar,*.class");
+
+ for (int i = 0; i < files.length; i++)
+ {
+ String file = files[i];
+
+ if (file.endsWith("jar"))
+ {
+ processJAR(file);
+ }
+ else
+ {
+ processClassReference(file);
+ }
+ }
+
+ }
+
+ /**
+ * Process an individual JAR file looking package
+ * dependencies.
+ */
+ public void processJAR(String file)
+ {
JarFile jarFile = null;
- treeMapListener = null;
try
{
- jarFile = new JarFile(file);
- treeMapListener = new TreeMapListener();
+ jarFile = new JarFile(new File(file));
List classEntries = JarUtil.getClassEntries(jarFile);
+ treeMapListener.getTreeMap().clear();
for (Iterator i = classEntries.iterator(); i.hasNext();)
{
JarEntry jarEntry = (JarEntry) i.next();
@@ -178,32 +206,10 @@
jarFile.close();
- Map map = treeMapListener.getTreeMap();
- for (Iterator i = map.keySet().iterator(); i.hasNext();)
+ for (Iterator i = treeMapListener.getTreeMap().keySet().iterator();
i.hasNext();)
{
String classReference = (String) i.next();
-
- // Don't care about internal classes or classes
- // that don't belong to a real package.
- if (classReference.indexOf("$") < 0)
- {
- boolean includePackage = true;
-
- for (Iterator j = packageExcludes.iterator(); j.hasNext();)
- {
- String packageExclude = (String) j.next();
- if (classReference.startsWith(packageExclude))
- {
- includePackage = false;
- break;
- }
- }
-
- if (includePackage)
- {
- packageReferences.add(map.get(classReference));
- }
- }
+ processClassReference(classReference);
}
}
catch (Exception e)
@@ -213,12 +219,43 @@
}
/**
+ * Process an individual class file.
+ *
+ * @param classReference An individual class reference in the form of a string.
+ */
+ private void processClassReference(String classReference)
+ {
+ // Don't care about internal classes or classes
+ // that don't belong to a real package.
+ if (classReference.indexOf("$") < 0)
+ {
+ boolean includePackage = true;
+
+ for (Iterator j = packageExcludes.iterator(); j.hasNext();)
+ {
+ String packageExclude = (String) j.next();
+ if (classReference.startsWith(packageExclude))
+ {
+ includePackage = false;
+ break;
+ }
+ }
+
+ if (includePackage)
+ {
+ packageReferences.add(
+ treeMapListener.getTreeMap().get(classReference));
+ }
+ }
+ }
+
+ /**
* Used for testing only.
*/
public static void main(String[] args)
{
ProjectResolver bdr = new ProjectResolver();
- bdr.setFile(new File(args[0]));
+ bdr.setBaseDirectory(new File(args[0]));
bdr.setPackageExcludes(args[1]);
bdr.resolveDependencies();
List packageReferences = bdr.getPackageReferences();
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>