Vincent Massol wrote:

> 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.
>

Types of Jars:
    build time
    run time
    test
    examples or demos


>
> 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]>


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

Reply via email to