From 3db45b04878de50b57c37cad40793bb5f35757d4 Mon Sep 17 00:00:00 2001 From: Petar Tahchiev Date: Tue, 28 Apr 2015 03:02:09 +0300 Subject: [PATCH 1/4] Allow generated pom.name, pom.description and pom.url to include custom properties when using create-archetype-from-project --- .../creator/FilesetArchetypeCreator.java | 25 +++++++++++++++-- .../creator/DefaultArchetypeCreatorTest.java | 28 ++++++++++++++----- .../projects/create-4/pom.xml.sample | 3 +- .../projects/create-4/subModuleWar/pom.xml | 3 +- pom.xml | 1 + 5 files changed, 48 insertions(+), 12 deletions(-) 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 06a4591e5..bf1ae24e6 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 @@ -855,6 +855,10 @@ private void createArchetypePom( Model pom, File archetypeFilesDirectory, Proper pom.setArtifactId( "${" + Constants.ARTIFACT_ID + "}" ); pom.setVersion( "${" + Constants.VERSION + "}" ); + pom.setName( getReversedPlainContent( pom.getName(), pomReversedProperties ) ); + pom.setDescription( getReversedPlainContent( pom.getDescription(), pomReversedProperties ) ); + pom.setUrl( getReversedPlainContent( pom.getUrl(), pomReversedProperties ) ); + rewriteReferences( pom, pomReversedProperties.getProperty( Constants.ARTIFACT_ID ), pomReversedProperties.getProperty( Constants.GROUP_ID ) ); @@ -1101,6 +1105,10 @@ private void createModulePom( Model pom, String rootArtifactId, File archetypeFi pom.setVersion( "${" + Constants.VERSION + "}" ); } + pom.setName( getReversedPlainContent( pom.getName(), pomReversedProperties ) ); + pom.setDescription( getReversedPlainContent( pom.getDescription(), pomReversedProperties ) ); + pom.setUrl( getReversedPlainContent( pom.getUrl(), pomReversedProperties ) ); + rewriteReferences( pom, rootArtifactId, pomReversedProperties.getProperty( Constants.GROUP_ID ) ); pomManager.writePom( pom, outputFile, initialPomFile ); @@ -1652,15 +1660,26 @@ private String getReversedContent( String content, Properties properties ) String result = StringUtils.replace( StringUtils.replace( content, "$", "${symbol_dollar}" ), "\\", "${symbol_escape}" ); + result = getReversedPlainContent( result, properties ); + + // TODO: Replace velocity to a better engine... + return "#set( $symbol_pound = '#' )\n" + "#set( $symbol_dollar = '$' )\n" + "#set( $symbol_escape = '\\' )\n" + + StringUtils.replace( result, "#", "${symbol_pound}" ); + } + + private String getReversedPlainContent( String content, Properties properties ) + { + + String result = content; + for ( Iterator propertyIterator = properties.keySet().iterator(); propertyIterator.hasNext(); ) { String propertyKey = (String) propertyIterator.next(); result = StringUtils.replace( result, properties.getProperty( propertyKey ), "${" + propertyKey + "}" ); } - // TODO: Replace velocity to a better engine... - return "#set( $symbol_pound = '#' )\n" + "#set( $symbol_dollar = '$' )\n" + "#set( $symbol_escape = '\\' )\n" - + StringUtils.replace( result, "#", "${symbol_pound}" ); + + return result; } private String getReversedFilename( String filename, Properties properties ) diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java index 04c34d1be..0e7d1fc30 100644 --- a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java +++ b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java @@ -348,14 +348,28 @@ public void testCreateFilesetArchetype4() createFilesetArchetype( project ); - File template = getTemplateFile( project, "subModuleEAR/pom.xml" ); + File template = getTemplateFile( project, "pom.xml" ); assertExists( template ); - assertContent( template, "${groupId}" ); - assertContent( template, "${artifactId}" ); - assertContent( template, "${version}" ); - assertContent( template, "Maven archetype Test create-4-subModuleEAR" ); - assertContent( template, "ear" ); - assertContent( template, "" ); + assertContent( template, "Maven archetype Test create-4 ${someProperty}" ); + assertContent( template, "pom" ); + + File earTemplate = getTemplateFile( project, "subModuleEAR/pom.xml" ); + assertExists( earTemplate ); + assertContent( earTemplate, "${groupId}" ); + assertContent( earTemplate, "${artifactId}" ); + assertContent( earTemplate, "${version}" ); + assertContent( earTemplate, "Maven archetype Test create-4-subModuleEAR" ); + assertContent( earTemplate, "ear" ); + assertContent( earTemplate, "" ); + + File warTemplate = getTemplateFile( project, "subModuleWar/pom.xml" ); + assertExists( warTemplate ); + assertContent( warTemplate, "${groupId}" ); + assertContent( warTemplate, "${artifactId}" ); + assertContent( warTemplate, "${version}" ); + assertContent( warTemplate, "Maven archetype Test create-4-subModuleWar ${someProperty}" ); + assertContent( warTemplate, "war" ); + assertContent( warTemplate, "" ); } protected void tearDown() diff --git a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample index 47d2832e2..a5cd40672 100644 --- a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample +++ b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample @@ -28,7 +28,8 @@ test-create-4 1.0-SNAPSHOT - Maven archetype Test create-4 + Maven archetype Test create-4 A String to search for + Some description A String to search for pom diff --git a/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml b/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml index fa7f9ab34..bc571f7ae 100644 --- a/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml +++ b/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml @@ -31,7 +31,8 @@ test-create-4-war - Maven archetype Test create-4-subModuleWar + Maven archetype Test create-4-subModuleWar A String to search for + Some description A String to search for war diff --git a/pom.xml b/pom.xml index affada89c..5844ca506 100644 --- a/pom.xml +++ b/pom.xml @@ -307,6 +307,7 @@ .repository/** .java-version + *.state From e8bdce3d920b8bf6eb21e186e67cb4f35f98db83 Mon Sep 17 00:00:00 2001 From: Petar Tahchiev Date: Tue, 28 Apr 2015 14:52:39 +0300 Subject: [PATCH 2/4] ARCHETYPE-481 --- .../maven/archetype/common/Constants.java | 2 ++ .../creator/FilesetArchetypeCreator.java | 21 ++++++++++-- .../creator/DefaultArchetypeCreatorTest.java | 23 +++++++++++-- .../exclude-patterns/.toexclude/dummy.file | 0 .../archetype.properties.sample | 9 +++++ .../exclude-patterns/nottoexclude/dummy.file | 0 .../projects/exclude-patterns/pom.xml.sample | 34 +++++++++++++++++++ 7 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 archetype-common/src/test/resources/projects/exclude-patterns/.toexclude/dummy.file create mode 100644 archetype-common/src/test/resources/projects/exclude-patterns/archetype.properties.sample create mode 100644 archetype-common/src/test/resources/projects/exclude-patterns/nottoexclude/dummy.file create mode 100644 archetype-common/src/test/resources/projects/exclude-patterns/pom.xml.sample 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 1fbb764a8..9015c62a5 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 @@ -52,6 +52,8 @@ public interface Constants String ARCHETYPE_DESCRIPTION = "archetype.description"; + String EXCLUDE_PATTERNS = "excludePatterns"; + List DEFAULT_FILTERED_EXTENSIONS = Arrays.asList( new String[] 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 bf1ae24e6..004e61c17 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 @@ -167,7 +167,12 @@ public void createArchetype( ArchetypeCreationRequest request, ArchetypeCreation Model pom = pomManager.readPom( FileUtils.resolveFile( basedir, Constants.ARCHETYPE_POM ) ); - List fileNames = resolveFileNames( pom, basedir ); + List excludePatterns = configurationProperties.getProperty( Constants.EXCLUDE_PATTERNS ) != null + ? Arrays.asList( + StringUtils.split( configurationProperties.getProperty( Constants.EXCLUDE_PATTERNS ), "," ) ) + : Collections.emptyList(); + + List fileNames = resolveFileNames( pom, basedir, excludePatterns ); if ( getLogger().isDebugEnabled() ) { getLogger().debug( "Scanned for files " + fileNames.size() ); @@ -987,7 +992,12 @@ private ModuleDescriptor createModule( Properties reverseProperties, String root setArtifactId( reverseProperties, pom.getArtifactId() ); - List fileNames = resolveFileNames( pom, basedir ); + List excludePatterns = reverseProperties.getProperty( Constants.EXCLUDE_PATTERNS ) != null + ? Arrays.asList( + StringUtils.split( reverseProperties.getProperty( Constants.EXCLUDE_PATTERNS ), "," ) ) + : Collections.emptyList(); + + List fileNames = resolveFileNames( pom, basedir, excludePatterns ); List filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding ); getLogger().debug( "Resolved filesets for module " + archetypeDescriptor.getName() ); @@ -1332,7 +1342,7 @@ private Properties getReversedProperties( ArchetypeDescriptor archetypeDescripto return reversedProperties; } - private List resolveFileNames( final Model pom, final File basedir ) + private List resolveFileNames( final Model pom, final File basedir, final List excludePatterns ) throws IOException { getLogger().debug( "Resolving files for " + pom.getId() + " in " + basedir ); @@ -1348,6 +1358,11 @@ private List resolveFileNames( final Model pom, final File basedir ) buff.append( ',' ).append( defaultExclude ).append( "/**" ); } + for ( String excludePattern : excludePatterns ) + { + buff.append( ',' ).append( excludePattern ); + } + String excludes = PathUtils.convertPathForOS( buff.toString() ); List fileNames = FileUtils.getFileNames( basedir, "**,.*,**/.*", excludes, false ); diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java index 0e7d1fc30..16c9fc2f7 100644 --- a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java +++ b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java @@ -154,6 +154,20 @@ public void testChangeJavaFilenameWhenCustomPropertyEqualsClassName() assertContent( template, "class ${someProperty}" ); } + public void testExcludePatternsMustExcludeDirectory() + throws Exception + { + String project = "exclude-patterns"; + + createFilesetArchetype( project ); + + File template = getTemplateFile( project, ".toexclude/dummy.file"); + assertNotExists(template); + + File template1 = getTemplateFile( project, "nottoexclude/dummy.file" ); + assertExists(template1); + } + public void testCreateFilesetArchetype1() throws Exception { @@ -161,7 +175,7 @@ public void testCreateFilesetArchetype1() createFilesetArchetype( project ); - File template = getTemplateFile( project, "src/main/java/subfolder1/App.java" ); + File template = getTemplateFile(project, "src/main/java/subfolder1/App.java" ); assertExists( template ); assertContent( template, "// ${someProperty}" ); assertContent( template, "package ${package}.subfolder1;" ); @@ -388,7 +402,7 @@ protected void setUp() new DefaultRepositoryLayout() ); } - private void assertContent( File template, String content ) + private void assertContent(File template, String content ) throws FileNotFoundException, IOException { String templateContent = FileUtils.fileRead( template, "UTF-8" ); @@ -401,6 +415,11 @@ private void assertExists( File file ) assertTrue( "File doesn't exist: " + file.getAbsolutePath(), file.exists() ); } + private void assertNotExists( File file ) + { + assertFalse( "File exists: " + file.getAbsolutePath(), file.exists() ); + } + private void assertNotContent( File template, String content ) throws FileNotFoundException, IOException { diff --git a/archetype-common/src/test/resources/projects/exclude-patterns/.toexclude/dummy.file b/archetype-common/src/test/resources/projects/exclude-patterns/.toexclude/dummy.file new file mode 100644 index 000000000..e69de29bb diff --git a/archetype-common/src/test/resources/projects/exclude-patterns/archetype.properties.sample b/archetype-common/src/test/resources/projects/exclude-patterns/archetype.properties.sample new file mode 100644 index 000000000..96e11f7a2 --- /dev/null +++ b/archetype-common/src/test/resources/projects/exclude-patterns/archetype.properties.sample @@ -0,0 +1,9 @@ +archetype.groupId=org.codehaus.mojo.archetypes +archetype.artifactId=maven-archetype-test +archetype.version=1.0 +groupId=org.apache.maven.archetype.test +artifactId=change-file-with-property +version=1.0-SNAPSHOT +package=archetype +someProperty=App +excludePatterns=.toexclude/** diff --git a/archetype-common/src/test/resources/projects/exclude-patterns/nottoexclude/dummy.file b/archetype-common/src/test/resources/projects/exclude-patterns/nottoexclude/dummy.file new file mode 100644 index 000000000..e69de29bb diff --git a/archetype-common/src/test/resources/projects/exclude-patterns/pom.xml.sample b/archetype-common/src/test/resources/projects/exclude-patterns/pom.xml.sample new file mode 100644 index 000000000..4c59ea2e7 --- /dev/null +++ b/archetype-common/src/test/resources/projects/exclude-patterns/pom.xml.sample @@ -0,0 +1,34 @@ + + + + + 4.0.0 + + org.apache.maven.archetype.test + exclude-patterns + 1.0-SNAPSHOT + + Maven archetype Test ExcludePatterns Property + pom + + From 6c078659e817617b6cd17e9da769dedb16fea7e7 Mon Sep 17 00:00:00 2001 From: Petar Tahchiev Date: Tue, 28 Apr 2015 15:13:24 +0300 Subject: [PATCH 3/4] ARCHETYPE-481 --- .../creator/FilesetArchetypeCreator.java | 28 +++---------- .../creator/DefaultArchetypeCreatorTest.java | 39 ++++++------------- .../projects/create-4/pom.xml.sample | 4 +- .../projects/create-4/subModuleWar/pom.xml | 4 +- 4 files changed, 21 insertions(+), 54 deletions(-) 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 004e61c17..a8f123d72 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 @@ -860,10 +860,6 @@ private void createArchetypePom( Model pom, File archetypeFilesDirectory, Proper pom.setArtifactId( "${" + Constants.ARTIFACT_ID + "}" ); pom.setVersion( "${" + Constants.VERSION + "}" ); - pom.setName( getReversedPlainContent( pom.getName(), pomReversedProperties ) ); - pom.setDescription( getReversedPlainContent( pom.getDescription(), pomReversedProperties ) ); - pom.setUrl( getReversedPlainContent( pom.getUrl(), pomReversedProperties ) ); - rewriteReferences( pom, pomReversedProperties.getProperty( Constants.ARTIFACT_ID ), pomReversedProperties.getProperty( Constants.GROUP_ID ) ); @@ -1115,10 +1111,6 @@ private void createModulePom( Model pom, String rootArtifactId, File archetypeFi pom.setVersion( "${" + Constants.VERSION + "}" ); } - pom.setName( getReversedPlainContent( pom.getName(), pomReversedProperties ) ); - pom.setDescription( getReversedPlainContent( pom.getDescription(), pomReversedProperties ) ); - pom.setUrl( getReversedPlainContent( pom.getUrl(), pomReversedProperties ) ); - rewriteReferences( pom, rootArtifactId, pomReversedProperties.getProperty( Constants.GROUP_ID ) ); pomManager.writePom( pom, outputFile, initialPomFile ); @@ -1675,18 +1667,6 @@ private String getReversedContent( String content, Properties properties ) String result = StringUtils.replace( StringUtils.replace( content, "$", "${symbol_dollar}" ), "\\", "${symbol_escape}" ); - result = getReversedPlainContent( result, properties ); - - // TODO: Replace velocity to a better engine... - return "#set( $symbol_pound = '#' )\n" + "#set( $symbol_dollar = '$' )\n" + "#set( $symbol_escape = '\\' )\n" - + StringUtils.replace( result, "#", "${symbol_pound}" ); - } - - private String getReversedPlainContent( String content, Properties properties ) - { - - String result = content; - for ( Iterator propertyIterator = properties.keySet().iterator(); propertyIterator.hasNext(); ) { String propertyKey = (String) propertyIterator.next(); @@ -1694,10 +1674,12 @@ private String getReversedPlainContent( String content, Properties properties ) result = StringUtils.replace( result, properties.getProperty( propertyKey ), "${" + propertyKey + "}" ); } - return result; + // TODO: Replace velocity to a better engine... + return "#set( $symbol_pound = '#' )\n" + "#set( $symbol_dollar = '$' )\n" + "#set( $symbol_escape = '\\' )\n" + + StringUtils.replace( result, "#", "${symbol_pound}" ); } - - private String getReversedFilename( String filename, Properties properties ) + + private String getReversedFilename( String filename, Properties properties ) { String result = filename; diff --git a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java index 16c9fc2f7..dcce2350d 100644 --- a/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java +++ b/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java @@ -179,7 +179,7 @@ public void testCreateFilesetArchetype1() assertExists( template ); assertContent( template, "// ${someProperty}" ); assertContent( template, "package ${package}.subfolder1;" ); - assertNotContent( template, "${packageInPathFormat}" ); + assertNotContent(template, "${packageInPathFormat}"); } public void testCreateFilesetArchetype2() @@ -356,36 +356,22 @@ public void testCreateFilesetArchetype3() } public void testCreateFilesetArchetype4() - throws Exception + throws Exception { String project = "create-4"; createFilesetArchetype( project ); - File template = getTemplateFile( project, "pom.xml" ); + File template = getTemplateFile( project, "subModuleEAR/pom.xml" ); assertExists( template ); - assertContent( template, "Maven archetype Test create-4 ${someProperty}" ); - assertContent( template, "pom" ); - - File earTemplate = getTemplateFile( project, "subModuleEAR/pom.xml" ); - assertExists( earTemplate ); - assertContent( earTemplate, "${groupId}" ); - assertContent( earTemplate, "${artifactId}" ); - assertContent( earTemplate, "${version}" ); - assertContent( earTemplate, "Maven archetype Test create-4-subModuleEAR" ); - assertContent( earTemplate, "ear" ); - assertContent( earTemplate, "" ); - - File warTemplate = getTemplateFile( project, "subModuleWar/pom.xml" ); - assertExists( warTemplate ); - assertContent( warTemplate, "${groupId}" ); - assertContent( warTemplate, "${artifactId}" ); - assertContent( warTemplate, "${version}" ); - assertContent( warTemplate, "Maven archetype Test create-4-subModuleWar ${someProperty}" ); - assertContent( warTemplate, "war" ); - assertContent( warTemplate, "" ); + assertContent( template, "${groupId}" ); + assertContent( template, "${artifactId}" ); + assertContent( template, "${version}" ); + assertContent( template, "Maven archetype Test create-4-subModuleEAR" ); + assertContent( template, "ear" ); + assertContent( template, "" ); } - + protected void tearDown() throws Exception { @@ -438,9 +424,8 @@ private void copy( File in, File out ) assertTrue( in.exists() ); } - private File getDescriptorFile( String project ) - { - return getFile( project, "target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype.xml" ); + private File getDescriptorFile( String project) { + return getFile(project, "target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype.xml" ); } private File getFile( String project, String file ) diff --git a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample index a5cd40672..d7de8d427 100644 --- a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample +++ b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample @@ -28,8 +28,8 @@ test-create-4 1.0-SNAPSHOT - Maven archetype Test create-4 A String to search for - Some description A String to search for + Maven archetype Test create-4 + Some description pom diff --git a/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml b/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml index bc571f7ae..a8ca777a2 100644 --- a/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml +++ b/archetype-common/src/test/resources/projects/create-4/subModuleWar/pom.xml @@ -31,8 +31,8 @@ test-create-4-war - Maven archetype Test create-4-subModuleWar A String to search for - Some description A String to search for + Maven archetype Test create-4-subModuleWar + Some description war From aaea124b6483d8059dc2087c2ab78d44e5f84e24 Mon Sep 17 00:00:00 2001 From: Petar Tahchiev Date: Tue, 28 Apr 2015 15:22:29 +0300 Subject: [PATCH 4/4] ARCHETYPE-481 --- .../src/test/resources/projects/create-4/pom.xml.sample | 1 - 1 file changed, 1 deletion(-) diff --git a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample index d7de8d427..47d2832e2 100644 --- a/archetype-common/src/test/resources/projects/create-4/pom.xml.sample +++ b/archetype-common/src/test/resources/projects/create-4/pom.xml.sample @@ -29,7 +29,6 @@ 1.0-SNAPSHOT Maven archetype Test create-4 - Some description pom