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

时间:2010-05-10 12:41:09

标签: maven-2 maven-archetype

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

└───src
    └───main
        └───webapp
            └───WEB-INF
                ├───cfg
                │   ├───log4j
                │   └───resources
                │       └───extensions
                │           ├───${shortName}-business
                │           └───${shortName}-layout
                └───lib

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

<requiredProperties>
  <requiredProperty key="shortName" />
</requiredProperties>

我在shortName中使用的属性fileSet

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

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

生成原型的命令:

mvn archetype:generate -B \
       -DgroupId=com.stackoverflow \
       -DartifactId=stackoverflow-question -DarchetypeGroupId=com.stackoverflow \
       -DarchetypeArtifactId=stackoverflow-archetype -DarchetypeVersion=1.0 \
       -DshortName=soq

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

..\
   ├───soq-business
   └───soq-layout

但是我将此名称${shortName}-business作为文件夹,而不是将其替换为属性。

..\
   ├───${shortName}-business
   └───${shortName}-layout

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

2 个答案:

答案 0 :(得分:19)

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

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

诀窍似乎是使用加倍的下划线而不是花括号语法,因此${shortName}变为__shortName__

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

HTH!

答案 1 :(得分:4)

正如Vivian所指出的那样,我的博客文章提供了一些如何做到这一点的提示。 但是,需要注意的一件事(博客中未明确提到)是此功能仅适用于原型插件2.x