In my common build file, for organization purposes, I retrieve files by type
and place them in particular directories. For example:
.../lib Contains win32 dlls
.../jlib Containes jar files
.../obl Contains Installscript libraries
This works, but I don't want to list out all of them. In other words, I want
to choose a few well known types for their own directories and the rest I want
to place in a directory called "misc".
One way to do this, is to have a type filter with negation capabilities. So,
for the type attribute, you could specify, "!jar, !dll, !obl". I've done this
will a small change in FitlerHelper:
public static Filter getArtifactTypeFilter(String types) {
if (types == null || types.trim().equals("*")) {
return NO_FILTER;
}
String[] t = types.split(",");
List acceptedTypes = new ArrayList(types.length());
List negatedTypes = new ArrayList(types.length());
for (int i = 0; i < t.length; i++) {
String type = t[i].trim();
if (type.startsWith("!")) {
negatedTypes.add(type.substring(1));
} else {
acceptedTypes.add(type);
}
}
Filter acceptedTypesFilter = new ArtifactTypeFilter(acceptedTypes);
Filter negatedTypesFilter = new NotFilter(new
ArtifactTypeFilter(negatedTypes));
return new OrFilter(acceptedTypesFilter, negatedTypesFilter);
}
This works for my situation, but I don't know if it's the best long term
approach. I would imagine a mechanism of providing filters in the same way
that the ant fileset tag works. In other words, providing include and exclude
tags. This would be extremely flexible, allowing the developer to perform any
type of filtering desired.
I haven't thought through all of the implications, but I thought I would post
the idea for discussion.
Thanks.
Scott