gpt4 book ai didi

maven - 如何将变量扩展到 maven-archetype 中的嵌套目录

转载 作者:行者123 更新时间:2023-12-01 08:11:24 30 4
gpt4 key购买 nike

假设我设置了 groupIdcom.example , 和 artifactIdfancy.project ,现在我想创建一个原型(prototype),以便在创建时扩展为以下结构:

|--src
|--main
|--com
|--example
|-fancy
|-project
|-App.java

也就是说,我想知道如何将变量扩展为嵌套目录。

我知道双下划线包装的变量将被替换为文件/目录名称,但我只能通过 __groupId__ 获得以下内容.
|--src
|--main
|--com.example
|-fancy.project
|-App.java

最佳答案

作为原型(prototype)的输入,您可以指定 package选项(如果您愿意,它将跟随您的输入、groupId 和 artifactId 连接,即使并非总是如此,因此提供了更大的灵 active )。

然后,在您的原型(prototype)中,您可以使用 packageInPathFormat选项(从原型(prototype) 2.2 开始可用)将替换任何点 .成斜线\并因此将其转换为生成项目的路径。

但是,即使支持该选项并且在这种情况下工作正常,该选项也没有正式记录(遗憾)。

Looking at the code , DefaultFilesetArchetypeGenerator及其getPackageInPathFormat提供来自 package 的相关转换路径选项,而 org.apache.maven.archetype.common.Constants.PACKAGE_IN_PATH_FORMAT是此选项的官方入口点。

关于此选项使用的一些外部指针:

  • http://geekofficedog.blogspot.be/2013/08/creating-maven-archetypes-tutorial.html
  • http://www.theotherian.com/2012/05/maven-archetypes-part-2-how-do-i-create.html


  • 进一步说明:
  • 你可以有__packageInPathFormat__ src/main/java 下的文件夹,例如
  • __packageInPathFormat然后将被 package 替换将点转换为斜线的选项
  • package选项的默认值为 groupId ,所以如果你不指定它,对于 groupId有值 com.sample ,路径将是 com/sample
  • 因此,您可以在调用时通过 -Dpackage=your.package 指定所需的包。重复 -DgroupId 的值和 -DartifactId (虽然有点冗长且容易出错),最终结果实际上将是您所期望的(转换为正确的路径)。
  • 您可以通过 archetype-metada.xml 指定新的默认值。文件,在 official documentation 中指定,通过 requiredProperties部分,你可以有类似的东西:
    <requiredProperties>
    <requiredProperty key="package">
    <defaultValue>__groupId__.__artifactId__</defaultValue>
    </requiredProperty>
    </requiredProperties>

    但是,生成的路径将是 com.sample/artifactid而不是 com/sample/artifactid .因此,由于处理工作流程会在将占位符转换为路径后替换占位符(可惜!),因此它不会按预期工作。
    (注意:它会将我们提供的点转换为配置值,但不会将点转换为替换的占位符)。

    作为一个快速的代码分析,看起来像 DefaultFilesetArchetypeGenerator类中的generateArchetype方法过早准备上下文(在它的 prepareVelocityContext 方法中,packageInPathFormat 被转换并添加到上下文中),然后将上下文传递给 processArchetypeTemplate*最终将调用 Velocity 引擎的方法(然后将替换占位符)。虽然我不是 Velocity 专家,因此我可能会错过一些胶水,但观察到的行为和代码工作流程似乎导致了这个结论。
  • 关于maven - 如何将变量扩展到 maven-archetype 中的嵌套目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35769195/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com