如何使用Maven Archetype创建动态命名的文件夹?

Chr*_*wes 13 maven-2 maven-archetype

我正在尝试构建一个这样的原型结构,一个带有一些Web框架自定义文件夹的webapp.特别是一些动态文件夹,它们也包含原型带来的一些文件.

????src
    ????main
        ????webapp
            ????WEB-INF
                ????cfg
                ?   ????log4j
                ?   ????resources
                ?       ????extensions
                ?           ????${shortName}-business
                ?           ????${shortName}-layout
                ????lib
Run Code Online (Sandbox Code Playgroud)

我为我添加了一个必需的属性,archetype-metadata.xml以便为项目创建一个简短名称,用于生成唯一文件夹.

<requiredProperties>
  <requiredProperty key="shortName" />
</requiredProperties>
Run Code Online (Sandbox Code Playgroud)

shortName我使用的属性fileSet:

<fileSet>
  <directory>[..]/resources/extensions/${shortName}-business</directory>
</fileSet>

<fileSet>
  <directory>[..]/resources/extensions/${shortName}-layout</directory>
</fileSet>
Run Code Online (Sandbox Code Playgroud)

生成原型的命令:

mvn archetype:generate -B \
       -DgroupId=com.stackoverflow \
       -DartifactId=stackoverflow-question -DarchetypeGroupId=com.stackoverflow \
       -DarchetypeArtifactId=stackoverflow-archetype -DarchetypeVersion=1.0 \
       -DshortName=soq
Run Code Online (Sandbox Code Playgroud)

我假设获得以下文件夹结构:

..\
   ????soq-business
   ????soq-layout
Run Code Online (Sandbox Code Playgroud)

但我得到这个名字${shortName}-business作为文件夹,而不是被属性替换.

..\
   ????${shortName}-business
   ????${shortName}-layout
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?如何在soq-business不知道文件夹名称的情况下将文件放在下面?

小智 20

我今天想到了完全相同的问题......

我在Adam Leggett找到了一些博客文章,描述了在路径中使用占位符:看看https://mikeciblogs.wordpress.com/2010/01/14/working-with-custom-maven-archetypes-part-1/(第4步).

诀窍似乎是使用加倍的下划线而不是花括号语法,所以${shortName}变成了__shortName__.

但是,我还没有尝试过这个解决方案.如果您这样做,请告知我们是否有效.谢谢!

HTH!