ARCHETYPE-548 Filter files with no extension.
This commit introduces a new property (archetype.filteredFileNames) which allows users to specify not only filtered file extensions but also comma-separated file-names of files that do not have any extension.
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java
index c24b1b6..0fed856 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java
@@ -41,7 +41,9 @@
private List<String> languages = new ArrayList<>();
- private List<String> filtereds = new ArrayList<>();
+ private List<String> filteredFileNames = new ArrayList<>();
+
+ private List<String> filteredFileExtensions = new ArrayList<>();
private String defaultEncoding = "UTF-8";
@@ -133,14 +135,26 @@
return this;
}
- public List<String> getFiltereds()
+ public List<String> getFilteredFileNames()
{
- return filtereds;
+ return filteredFileNames;
}
- public ArchetypeCreationRequest setFiltereds( List<String> filtereds )
+ public ArchetypeCreationRequest setFilteredFileNames( List<String> filteredFileNames )
{
- this.filtereds = filtereds;
+ this.filteredFileNames = filteredFileNames;
+
+ return this;
+ }
+
+ public List<String> getFilteredFileExtensions()
+ {
+ return filteredFileExtensions;
+ }
+
+ public ArchetypeCreationRequest setFilteredFileExtensions( List<String> filteredFileExtensions )
+ {
+ this.filteredFileExtensions = filteredFileExtensions;
return this;
}
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
index 34f8e64..f7f52ae 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
@@ -46,6 +46,8 @@
String ARTIFACT_ID = "artifactId";
+ String ARCHETYPE_FILTERED_FILENAMES = "archetype.filteredFileNames";
+
String ARCHETYPE_FILTERED_EXTENSIONS = "archetype.filteredExtensions";
String ARCHETYPE_LANGUAGES = "archetype.languages";
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
index 6c0a03d..517ca23 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
@@ -108,7 +108,8 @@
{
MavenProject project = request.getProject();
List<String> languages = request.getLanguages();
- List<String> filtereds = request.getFiltereds();
+ List<String> filteredFileNames = request.getFilteredFileNames();
+ List<String> filteredFileExtensions = request.getFilteredFileExtensions();
String defaultEncoding = request.getDefaultEncoding();
boolean preserveCData = request.isPreserveCData();
boolean keepParent = request.isKeepParent();
@@ -203,7 +204,8 @@
}
}
- List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding );
+ List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages,
+ filteredFileNames, filteredFileExtensions, defaultEncoding );
getLogger().debug( "Resolved filesets for " + archetypeDescriptor.getName() );
archetypeDescriptor.setFileSets( filesets );
@@ -229,7 +231,8 @@
ModuleDescriptor moduleDescriptor =
createModule( reverseProperties, rootArtifactId, moduleId, packageName,
FileUtils.resolveFile( basedir, moduleId ),
- new File( archetypeFilesDirectory, moduleIdDirectory ), languages, filtereds,
+ new File( archetypeFilesDirectory, moduleIdDirectory ),
+ languages, filteredFileNames, filteredFileExtensions,
defaultEncoding, preserveCData, keepParent );
archetypeDescriptor.addModule( moduleDescriptor );
@@ -988,7 +991,9 @@
private ModuleDescriptor createModule( Properties reverseProperties, String rootArtifactId, String moduleId,
String packageName, File basedir, File archetypeFilesDirectory,
- List<String> languages, List<String> filtereds, String defaultEncoding,
+ List<String> languages, List<String> filteredFileNames,
+ List<String> filteredFileExtensions,
+ String defaultEncoding,
boolean preserveCData, boolean keepParent )
throws IOException, XmlPullParserException
{
@@ -1026,7 +1031,8 @@
List<String> fileNames = resolveFileNames( pom, basedir, excludePatterns );
- List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding );
+ List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages,
+ filteredFileNames, filteredFileExtensions, defaultEncoding );
getLogger().debug( "Resolved filesets for module " + archetypeDescriptor.getName() );
archetypeDescriptor.setFileSets( filesets );
@@ -1051,8 +1057,9 @@
ModuleDescriptor moduleDescriptor =
createModule( reverseProperties, rootArtifactId, subModuleId, packageName,
FileUtils.resolveFile( basedir, subModuleId ),
- FileUtils.resolveFile( archetypeFilesDirectory, subModuleIdDirectory ), languages,
- filtereds, defaultEncoding, preserveCData, keepParent );
+ FileUtils.resolveFile( archetypeFilesDirectory, subModuleIdDirectory ),
+ languages, filteredFileNames,
+ filteredFileExtensions, defaultEncoding, preserveCData, keepParent );
archetypeDescriptor.addModule( moduleDescriptor );
@@ -1373,12 +1380,13 @@
}
private List<FileSet> resolveFileSets( String packageName, List<String> fileNames, List<String> languages,
- List<String> filtereds, String defaultEncoding )
+ List<String> filteredFileNames,
+ List<String> filteredExtensions, String defaultEncoding )
{
List<FileSet> resolvedFileSets = new ArrayList<>();
getLogger().debug(
- "Resolving filesets with package=" + packageName + ", languages=" + languages + " and extentions="
- + filtereds );
+ "Resolving filesets with package=" + packageName + ", languages=" + languages
+ + ", fileNames=" + filteredFileNames + " and extentions=" + filteredExtensions );
List<String> files = new ArrayList<>( fileNames );
@@ -1392,7 +1400,12 @@
getLogger().debug( "Using languages includes " + languageIncludes );
StringBuilder filteredIncludes = new StringBuilder();
- for ( String filtered : filtereds )
+ for ( String filtered : filteredFileNames )
+ {
+ filteredIncludes.append( ( ( filteredIncludes.length() == 0 ) ? "" : "," ) + "**/" + filtered );
+ }
+
+ for ( String filtered : filteredExtensions )
{
filteredIncludes.append(
( ( filteredIncludes.length() == 0 ) ? "" : "," ) + "**/" + ( filtered.startsWith( "." ) ? "" : "*." )
@@ -1721,9 +1734,9 @@
List<String> excludes = new ArrayList<>();
for ( String extension : extensions )
- {
+ {
includes.add( "**/*." + extension );
- }
+ }
return createFileSet( excludes, false, filtered, group, includes, defaultEncoding );
}
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
index 68b3aa4..6df89de 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
@@ -117,6 +117,12 @@
private ArchetypeManager manager;
/**
+ * File file names which are checked for project's text files (vs binary files).
+ */
+ @Parameter( property = "archetype.filteredFileNames" )
+ private String archetypeFilteredFileNames;
+
+ /**
* File extensions which are checked for project's text files (vs binary files).
*/
@Parameter( property = "archetype.filteredExtentions" )
@@ -247,12 +253,14 @@
configurator.configureArchetypeCreation( project, Boolean.valueOf( interactive ), executionProperties,
propertyFile, languages );
- List<String> filtereds = getFilteredExtensions( archetypeFilteredExtentions, propertyFile );
+ List<String> filteredFileNames = getFilteredFileNames( archetypeFilteredFileNames, propertyFile );
+ List<String> filteredFileExtensions = getFilteredExtensions( archetypeFilteredExtentions, propertyFile );
ArchetypeCreationRequest request =
new ArchetypeCreationRequest().setDefaultEncoding( defaultEncoding ).setProject( project )
/* Used when in interactive mode */.setProperties( properties ).setLanguages( languages )
- /* Should be refactored to use some ant patterns */.setFiltereds( filtereds )
+ .setFilteredFileNames( filteredFileNames )
+ /* Should be refactored to use some ant patterns */.setFilteredFileExtensions( filteredFileExtensions )
/* This should be correctly handled */.setPreserveCData( preserveCData ).setKeepParent(
keepParent ).setPartialArchetype( partialArchetype )
.setLocalRepository( localRepository ).setProjectBuildingRequest( session.getProjectBuildingRequest() )
@@ -293,6 +301,33 @@
}
}
+ private List<String> getFilteredFileNames( String archetypeFilteredFileNames, File propertyFile ) throws IOException
+ {
+ List<String> filteredFileNames = new ArrayList<>();
+
+ if ( StringUtils.isNotEmpty( archetypeFilteredFileNames ) )
+ {
+ filteredFileNames.addAll( Arrays.asList( StringUtils.split( archetypeFilteredFileNames, "," ) ) );
+
+ getLog().debug( "Found in command line fileNames = " + filteredFileNames );
+ }
+
+ if ( filteredFileNames.isEmpty() && propertyFile != null && propertyFile.exists() )
+ {
+ Properties properties = PropertyUtils.loadProperties( propertyFile );
+
+ String fileNames = properties.getProperty( Constants.ARCHETYPE_FILTERED_FILENAMES );
+ if ( StringUtils.isNotEmpty( fileNames ) )
+ {
+ filteredFileNames.addAll( Arrays.asList( fileNames.split( "," ) ) );
+ }
+
+ getLog().debug( "Found in propertyFile " + propertyFile.getName() + " fileNames = " + filteredFileNames );
+ }
+
+ return filteredFileNames;
+ }
+
private List<String> getFilteredExtensions( String archetypeFilteredExtentions, File propertyFile ) throws IOException
{
List<String> filteredExtensions = new ArrayList<>();