Should this feature be accepted, I would prefer an include rather than
an exclude (because you don't control list of jars with an exclude). Or
maybe both.

I was also in favor of this but in the end, I am modifying our builds so
that every project publishes its jar to a common repository.

In any case, I am +1 for this feature as an easy way for projects to
migrate to Maven. 

Also, I see the need to have different repositories. At least one for
jars needed at build time and another one for jars needed at runtime.

Thanks
-Vincent

> -----Original Message-----
> From: Hanson Char [mailto:[EMAIL PROTECTED]]
> Sent: 07 June 2002 17:16
> To: '[EMAIL PROTECTED]'
> Cc: NYC06-RCJAVA; NYC06-IHUB
> Subject: RE: Optional Feature: Zero dependency configuration
> 
> Below is a sample specification in either project.properties or
> build.properties:
> 
> lib.repo.dynamic = c:/cvs/portal/lib, c:/cvs/portal/lib/build
> 
> lib.repo.dynamic.exclude = c:/cvs/portal/lib/boot.jar,
> c:/cvs/portal/lib/boot_app.jar, \
>       c:/cvs/portal/lib/boot_remote.jar,
> c:/cvs/portal/lib/build/rcoll.jar, \
>        c:/cvs/portal/lib/build/ejb_sl_tiff2gif.jar,
> c:/cvs/portal/lib/build/transportv2.jar
> 
> Hanson
> > -----Original Message-----
> > From: Hanson Char
> > Sent: Friday, June 07, 2002 11:57 AM
> > To: '[EMAIL PROTECTED]'
> > Cc: NYC06-RCJAVA; NYC06-IHUB
> > Subject: Optional Feature: Zero dependency configuration
> >
> >
> > I notice the need in Maven to specify the jar/zip file
> > dependency both in the project.xml and in "lib.repo" or
> > "maven.repo.remote".
> >
> > However, our existing projects have pretty large sizes using
> > a lot of jar/zip files residing in multiple directories.  So
> > I suggest to support of the optional feature of "zero
> > dependency configuration".
> >
> > Specifically,
> >
> > 1) specify the "lib.repo.dynamic" property to point to a list
> > of directories or direct jar/zip files.  Jar/zip files both
> > from those directories and directly specified will be
> > automatically added to the runtime classpath by Maven.
> >
> > 2) specify the "lib.repo.dynamic.exclude" property to point
> > to a list of jar/zip files to be explicitly excluded from
> > being loaded during the dynamic loading process.
> >
> > 3) (2) always overrides (1).
> >
> > 4) These properties are an optional features, and they can
> > work with the existing properties of Maven at the same time
> > without conflicts.
> >
> > By using these properties, the <dependencies> elements can be
> > entirely commented out or omitted from project.xml.
> >
> > To support the new properties, I created on class
> > DynamicRepo.java and added one line of code to
> > ProjectProperties.java (MAVEN_1_0_B4 (revision: 1.43)).
> >
> > Please find below the source codes for the suggested changes.
> >  They work nicely in our installation.
> >
> > Just wonder if your group like the idea, and if so if you can
> > incorporate the changes to your CVS repository, so we can
> > still have the feature for future releases.
> >
> > Thanks,
> > Hanson
> >
> > org.apache.maven.ProjectProperties.java
> > ---------------------------------------
> >     private void createClasspathReference()
> >     {
> >         Path classpath = new Path(getProject());
> >
> >         for (Iterator i =
> > getMavenProject().getDependencies().iterator();
> >              i.hasNext();)
> >         {
> >             Dependency dependency = (Dependency) i.next();
> >
> >             Path p = new Path(getProject());
> >             p.setPath(new File(libRepo,
> > dependency.getJar()).getAbsolutePath());
> >             classpath.append(p);
> >         }
> >         ///////////// Change: start
> >         DynamicRepo.addDynClasspathReference(getProject(),
classpath);
> >         ///////////// Change: end
> >
> > getProject().addReference("maven.dependency.classpath", classpath);
> >     }
> >
> > org.apache.maven.DynamicRepo.java (new class)
> > ---------------------------------
> > package org.apache.maven;
> >
> > import java.io.*;
> > import java.util.*;
> >
> > import org.apache.tools.ant.*;
> > import org.apache.tools.ant.types.*;
> > /**
> >  * Dynamic repository which supports the optional feature of
> > zero-dependency configuration.
> >  * It automatic loads a set of jar/zip files to the classpath
> > from a list of comma-delimited
> >  * directories or files specified in the project property
> > "lib.repo.dynamic".
> >  *
> >  * An optional set of files can be explicitely excluded from
> > being loaded via the dynamic repository.
> >  * These files are specified as a list of comma-delimited
> > jar/zip files in the
> >  * project property "lib.repo.dynamic.exclude".
> >  *
> >  * @author Hanson Char
> >  * @version 1.0
> >  */
> > class DynamicRepo {
> >   private static final String DELIMITER = ",";
> >   /**
> >    * Dynamically adds the jar/zip files to the classpath.
> >    * @project the current project.
> >    * @classpath the current classpath.
> >    */
> >   static void addDynClasspathReference(Project project, final
> > Path classpath)
> >   {
> >     String dynlibRepo = project.getProperty("lib.repo.dynamic");
> >
> >     if (dynlibRepo == null || dynlibRepo.trim().length() == 0) {
> >       // dynamic repository not specified.
> >       return;
> >     }
> >     final Set excludeFileSet =
> > loadExcludeFileSet(project.getProperty("lib.repo.dynamic.exclude"));
> >     // Figure out the set of file/dir to be used for dynamic lookup.
> >     StringTokenizer st = new StringTokenizer(dynlibRepo,
> > DELIMITER, true);
> >
> >     while (st.hasMoreTokens()) {
> >       String token = st.nextToken();
> >
> >       if (token.equals(DELIMITER)) {
> >         continue;
> >       }
> >       File file = new File(token.trim());
> >
> >       if (!file.exists()) {
> >         continue;
> >       }
> >       if (file.isFile()) {
> >         String name = file.getName();
> >
> >         if (name.endsWith(".jar") || name.endsWith(".zip")) {
> >           if (!excludeFileSet.contains(file)) {
> >             addFilesToClasspath(project, classpath, new
File[]{file});
> >           }
> >         }
> >         continue;
> >       }
> >       // directory.
> >       File[] list = file.listFiles(new FilenameFilter() {
> >         public boolean accept(File dir, String name) {
> >           return (name.endsWith(".jar") || name.endsWith(".zip"))
> >             && !excludeFileSet.contains(new File(dir, name));
> >         }
> >       });
> >       addFilesToClasspath(project, classpath, list);
> >     }
> >   }
> >   /** Returns a set of jar/zip files to be excluded from
> > dynamic loading. */
> >   private static Set loadExcludeFileSet(String dynlibRepoExclude) {
> >     Set set = new HashSet();
> >
> >     if (dynlibRepoExclude == null ||
> > dynlibRepoExclude.trim().length() == 0) {
> >       // exclude list not specified.
> >       return set;
> >     }
> >     StringTokenizer st = new
> > StringTokenizer(dynlibRepoExclude, DELIMITER, true);
> >
> >     while (st.hasMoreTokens()) {
> >       String token = st.nextToken();
> >
> >       if (token.equals(DELIMITER)) {
> >         continue;
> >       }
> >       File file = new File(token.trim());
> >
> >       if (!file.exists() || !file.isFile()) {
> >         continue;
> >       }
> >       String name = file.getName();
> >
> >       if (!name.endsWith(".jar") && !name.endsWith(".zip")) {
> >         continue;
> >       }
> >       set.add(file);
> >     }
> >     return set;
> >   }
> >   /** Adds the given set of files to the specified classpath. */
> >   private static void addFilesToClasspath(Project project,
> > Path classpath, File[] file)
> >   {
> >     for (int i=0; i < file.length; i++) {
> >       Path p = new Path(project);
> >       System.out.println(new StringBuffer()
> >         .append("DynamicRepo>>Adding ")
> >         .append(file[i])
> >         .append(" to classpath.")
> >         .toString());
> >       p.setPath(file[i].getAbsolutePath());
> >       classpath.append(p);
> >     }
> >   }
> > }
> >
> > /////////////////////////////// end ///////////////////////////////
> >


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to