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