-
Notifications
You must be signed in to change notification settings - Fork 176
Description
Affected version
this bug has been around for more than a decade
Bug description
Steps to reproduce the bug
- System properties provide
archetypeGroupId(G) andarchetypeArtifactId(A), but notarchetypeVersion(V), - G:A is not found in the aggregate archetype catalog, and
- The command runs in the interactive mode.
For example, I tried to use org.apache.maven.archetypes:maven-archetype-webapp, but the artifactId was misspelled:
mvn archetype:generate "-DarchetypeGroupId=org.apache.maven.archetypes" "-DarchetypeArtifactId=maven-archetype-web"
Expected behavior
The goal keeps the original coordinates, and fails with G:A:1.0 immediately. 1.0 is the default version.
Current behavior
The goal substitutes G:A with org.apache.maven.archetypes:maven-archetype-quickstart, which is then used as the default answer for the prompt:
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 2293:
2293 is the number for org.apache.maven.archetypes:maven-archetype-quickstart. The name, however, is not shown.
If the problem is caused by a typo, a typical user may not realize that the archetype has been changed. And the huge list makes it difficult to scroll back and forth. As a result, the user will believe the number represents the intended archetype and hit the Enter/Return key. At this point, the new name is shown, but since there is no way to recover, the user has to terminate the execution.
If the problem is not caused by a typo - that is, the intended archetype is simply not in the catalogs, this behavior is completely useless.
Details
The following schematic shows what happens in org.apache.maven.archetype.ui.generation.DefaultArchetypeSelector's selectArchetype() method. m is short for org.apache.maven.archetypes, q is for maven-archetype-quickstart, and f is for the version of the first result found.
G A V ---------------------------------------------------------------------------> G A V
G:A found
G A 0 ---------------------------------------------------------------------------> G A f
|
| G:A not found batch mode
-------------------------------------------------------------------------> G A 1.0
|
| interactive mode
---------------------> 000 --> m 0 1.0 --> [m q 1.0]
0 A V ---------------------------------------------------------------------------> m A V
0 A 0 ---------------------------------------------------------------------------> m A 1.0
batch mode
G 0 V --------------> G q V -----------------------------------------------------> G q V
|
| interactive mode
---------------------------> [G q V]
batch mode
G 0 0 --> G 0 1.0 --> G q 1.0 ---------------------------------------------------> G q 1.0
|
| interactive mode
---------------------------> [G q 1.0]
batch mode
0 0 V --> m 0 V ----> m q V -----------------------------------------------------> m q V
|
| interactive mode
---------------------------> [m q V]
batch mode
0 0 0 --> m 0 1.0 --> m q 1.0 ---------------------------------------------------> m q 1.0
|
| interactive mode
---------------------------> [m q 1.0]
All other cases respect the original G and A, using org.apache.maven.archetypes if G is missing and maven-archetype-quickstart if A is missing. When the archetype is not found in the catalogs, the goal fails immediately, reporting the coordinates to the user.