代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

如何使用maven原型创建动态命名的文件夹?

  •  13
  • Christopher Klewes  · 技术社区  · 14 年前

    我正在尝试构建一个这样的原型结构,一个带有一些自定义文件夹的web应用程序,用于我们的web框架。尤其是一些动态文件夹,其中还将包含一些由原型带来的文件。

    └───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 回复  |  直到 14 年前
        1
  •  19
  •   aholub7x    8 年前

    我今天也想到了同样的问题…

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

    技巧似乎是使用双下划线而不是大括号语法,所以 ${shortName} 变成 __shortName__ .

    不过,我还没试过解决办法。如果你这样做,请让我们知道它是否有效。谢谢!

    嗯!

        2
  •  4
  •   Adam Leggett    14 年前

    正如薇薇安善意地指出的,我的博客文章提供了一些关于如何做到这一点的提示。 但是,有一点需要注意(博客中没有明确提到),这一特性只适用于原型插件2.x