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