apache / apache/maven-archetype

[ARCHETYPE-619] Velocity parsing fails when replacing tokens in file names

Open
#858 0 comments 0 reactions 0 assignees View on GitHub
bug priority:major
Dominant language
Java
Stars
148
Forks
181
Avg merge
1d 20h
Merged PRs (30d)
8

Description

**[Tyler Thrailkill](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=snowe)** opened **[ARCHETYPE-619](https://issues.apache.org/jira/browse/ARCHETYPE-619?redirect=false)** and commented

Trying to use certain expressions in a requiredProperty results in code generation failure with the error:

 

```java
[DEBUG] Processing fileset src/main/kotlin (Filtered-Packaged) [ -- ] -> 28:
[src/main/kotlin/, src/main/kotlin/quarkus/, src/main/kotlin/aws/, src/main/kotlin/helpers/, src/main/kotlin/helpers/serialization/, src/main/kotlin/helpers/drools/, src/main/kotlin/helpers/aws/, src/main/kotlin/helpers/logging/, src/main/kotlin/rest/, src/main/kotlin/quarkus/__z_handlerName__UnitQuery__z_handlerName__QueryEndpoint.kt, src/main/kotlin/quarkus/__z_handlerName__UnitQuery__z_handlerName__Query.kt, src/main/kotlin/aws/LambdaHandler.kt, src/main/kotlin/helpers/CDK.kt, src/main/kotlin/helpers/serialization/BigDecimalSerializer.kt, src/main/kotlin/helpers/serialization/Serialization.kt, src/main/kotlin/helpers/drools/AgendaEventListener.kt, src/main/kotlin/helpers/Either.kt, src/main/kotlin/helpers/aws/CdkHelpers.kt, src/main/kotlin/helpers/aws/AwsServiceClientProducer.kt, src/main/kotlin/helpers/aws/awsHelpers.kt, src/main/kotlin/helpers/aws/SecretsResolver.kt, src/main/kotlin/helpers/aws/lambdaDsl.kt, src/main/kotlin/helpers/logging/LoggingConfiguration.kt, src/main/kotlin/helpers/ConfigService.kt, src/main/kotlin/rest/DebugEndpoint.kt, src/main/kotlin/rest/__z_handlerName__Service.kt, src/main/kotlin/rest/Enums.kt, src/main/kotlin/rest/Rest.kt]
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//'
[DEBUG] Processing template archetype-resources/src/main/kotlin/
[WARNING] Don't override file /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//quarkus/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/quarkus/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/quarkus
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//aws/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/aws/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/aws
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//helpers/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/helpers/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/helpers
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//helpers/serialization/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/helpers/serialization/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/helpers/serialization
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//helpers/drools/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/helpers/drools/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/helpers/drools
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//helpers/aws/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/helpers/aws/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/helpers/aws
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//helpers/logging/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/helpers/logging/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/helpers/logging
[DEBUG] Final interpolated file path: 'src/main/kotlin/com/sunrun/pricing//rest/'
[DEBUG] Processing template archetype-resources/src/main/kotlin/rest/
[DEBUG] Creating directory /Users/tyler/Documents/dev/work/testing-archetypes/test1/src/main/kotlin/com/sunrun/pricing/rest
[DEBUG] Replacing property 'z_handlerName' in file path 'src/main/kotlin/com/sunrun/pricing//quarkus/__z_handlerName__UnitQuery__z_handlerName__QueryEndpoint.kt' with value '${WordUtils.capitalize(projectName).replaceAll(" ", "")}'.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.479 s
[INFO] Finished at: 2021-09-20T14:27:02-06:00
[INFO] Final Memory: 19M/312M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:generate (default-cli) on project standalone-pom: named capturing group is missing trailing '}' -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:generate (default-cli) on project standalone-pom: named capturing group is missing trailing '}'
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoFailureException: named capturing group is missing trailing '}'
at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:217)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more
Caused by: java.lang.IllegalArgumentException: named capturing group is missing trailing '}'
at java.util.regex.Matcher.appendReplacement(Matcher.java:841)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.replaceFilenameTokens(DefaultFilesetArchetypeGenerator.java:373)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.getOutputFile(DefaultFilesetArchetypeGenerator.java:343)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.processFileSet(DefaultFilesetArchetypeGenerator.java:512)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.processTemplates(DefaultFilesetArchetypeGenerator.java:759)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.processArchetypeTemplates(DefaultFilesetArchetypeGenerator.java:488)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.processFilesetProject(DefaultFilesetArchetypeGenerator.java:606)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.processFilesetModule(DefaultFilesetArchetypeGenerator.java:539)
at org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator.generateArchetype(DefaultFilesetArchetypeGenerator.java:206)
at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.processFileSetArchetype(DefaultArchetypeGenerator.java:133)
at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.generateArchetype(DefaultArchetypeGenerator.java:104)
at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.generateArchetype(DefaultArchetypeGenerator.java:148)
at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.generateArchetype(DefaultArchetypeGenerator.java:163)
at org.apache.maven.archetype.DefaultArchetypeManager.generateProjectFromArchetype(DefaultArchetypeManager.java:75)
at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:203)
... 22 more

```

 

In this case the requiredProperty that caused the failure was this:

```xml

${WordUtils.capitalize(projectName).replaceAll(" ", "")}

```

But it has occurred with things as innocuous as

```
projectName.replaceAll("-", "")
```

. It appears that the file name token replacement is not actually using Velocity at all, even though it is used everywhere else for requiredProperties.

I've attached the full log.

---

**Affects:** 3.2.0, 3.2.1

**Attachments:**
- [log.txt](https://issues.apache.org/jira/secure/attachment/13033929/log.txt) (_47.82 kB_)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with DefaultFilesetArchetypeGenerator.replaceFilenameTokens and getOutputFile, the entry points named in the stack trace. Reproduce the failure using the requiredProperty examples and the Maven archetype generation command from the report. Done means expressions such as projectName.replaceAll("-", "") no longer cause filename token replacement to fail.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
build-system
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.