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

2023-12-05

假设我已经设置了groupId to com.example, and artifactId to fancy.project,现在我想创建一个原型,这样在创建时会扩展为以下结构:

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

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

我知道双下划线包裹的变量将在文件/目录名称中替换,但我只能得到以下内容__groupId__.

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

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

然后,在您的原型中,您可以使用packageInPathFormat选项(自原型以来可用2.2) 这将取代任何点.变成斜杠\并因此将其转换为生成项目的路径。

然而,尽管该选项受到支持并且在这种情况下工作得很好,但该选项并未被正式记录(遗憾)。

看代码, the 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 下的文件夹
  • The __packageInPathFormat然后将被替换为package将点转换为斜线的选项
  • The package选项有一个默认值groupId,所以如果你不指定它,对于groupId有价值com.sample,路径将是com/sample
  • 因此,您可以在调用时指定所需的包-Dpackage=your.package重复值-DgroupId and -DartifactId(虽然有点冗长且容易出错),最终结果实际上将是您所期望的(转换为正确的路径)。
  • 您可以通过指定新的默认值archetype-metada.xml文件中指定的官方文档,通过requiredProperties部分,你可以有类似的东西:

    <requiredProperties>
        <requiredProperty key="package">
            <defaultValue>__groupId__.__artifactId__</defaultValue>
        </requiredProperty>
    </requiredProperties>
    

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

    通过快速代码分析,似乎是DefaultFilesetArchetypeGenerator其类中的generateArchetype方法太早准备上下文(在其prepareVelocityContext方法,其中packageInPathFormat被转换并添加到上下文中),然后上下文被传递到processArchetypeTemplate*最终将调用 Velocity 引擎的方法(它将取代占位符)。虽然我不是 Velocity 专家,因此我可能会错过一些粘合剂,但观察到的行为和代码工作流程似乎得出了这个结论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 使用 Casperjs 清除本地存储

    我正在使用 casperjs 使用 localstorage 对backbonejs 应用程序进行一些测试 我的问题是使用 casperjs 测试时无法清除本地存储 我一直在尝试使用localStorage clear 在我的 casper
  • 在 P5.js 中旋转网格内的对象

    我正在尝试使用合适的 OOP 方法来让对象在网格单元格内单独旋转 我当前的结果是围绕 0 0 参考点旋转所有对象 而不是每个对象在其自己的单元格内旋转 当然 需要的是一个正确的翻译函数 但是当我尝试在innerSquare函数中应用它时tr
  • AngularJS 中的 lightGallery(jQuery 插件)

    我正在尝试获取 lightGallery jQuery 插件 http sachinchoolur github io lightGallery index html 与 AngularJS 一起使用 我发现一些答案表明我需要一个指令 所以
  • 将 CSS 选择器与 Javascript RegExp 相匹配

    基本上我需要对 CSS 文件中的所有 CSS 选择器进行模式匹配 理想情况下 它应该能够获取所有这些规则 以及某人可以在 CSS 文件中编写的任何其他规则 如果这有帮助的话 这是针对 javascript CSS 解析器的 div div
  • 我可以安全地依赖mysql中的列名大小写吗?

    我想使用驼峰式大小写命名我的 mysql 表列名称 并使用相同的驼峰式大小写名称从这些 mysql 表创建 php 类 我将自动生成这些 php 类 我想知道无论我在哪个平台上运行应用程序 是否都可以依赖列名大小写 例如 如果我将一个列名命
  • 通过OpenCV的camshift算法控制鼠标指针(或者鼠标的基本功能)

    我使用 EmguCV openCV 的包装 用 C 编写了一个程序 该程序使用 camshift 算法跟踪对象 在对象周围绘制一个矩形 光标移动到矩形的中心 输入来自网络摄像头 最初的问题是光标无法覆盖整个屏幕 它的运动受到框架尺寸的限制
  • 将 Jenkins Groovy Postbuild 步骤添加到所有作业

    怎么可以一样Jenkins Groovy 后期构建插件步骤是否添加到所有作业中 我们有 50 多个工作 因此很难将所需 Groovy 代码的链接复制粘贴到每个工作 我通常通过更新受影响作业的 config xml 来进行类似的批量更改 每个
  • 使用 JavaScript 进行井字游戏

    我正在使用 html css 和 JavaScript 编写一个 tic tac toe 游戏 我创建了按钮来获取输入markbox cell 函数和 deres 函数称为获胜条件 用于检查赢得游戏的条件 在我的代码中它没有检查winnin
  • Angular 6 无法自动从提供的对象中选择/绑定下拉列表值

    我从服务中获取一个国家 地区对象 并将其绑定到一个包含国家 地区下拉列表的表单 从服务检索国家 地区后 该国家 地区并未显示为选中状态 但所有其他数据均显示正常 包括绑定到下拉列表的字符串性别字段 不过 我可以从列表中手动选择国家 地区 如
  • 如何使用整数除法 SSE 指令? [复制]

    这个问题在这里已经有答案了 根据参考here应在 immintrin h 中定义以下函数 m128i mm idiv epi32 m128i a m128i b m128i mm idivrem epi32 m128i mem addr m
  • 为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 运行得更快? [复制]

    这个问题在这里已经有答案了 在我使用 numpy 1 12 0 的基准测试中 计算点积float32 ndarrays比其他数据类型快得多 In 3 f16 np random random 500000 128 astype float1
  • 如何配置ListView自动改变高度?

    我有三个ListView相同的小部件LinearLayout 像这样的东西 我省略了与本示例不相关的 XML 元素
  • 包含自定义 cmdlet 的 Start-Job 因奇怪错误而终止

    我开发了一些定制cmdlets用于向 SharePoint 系统执行不同的导入任务 目前 所有这些 cmdlet 都在单个 PowerShell 脚本中以串行方式运行 我想更改此设置 以便每个 cmdlet 在单独的任务 作业 中执行 主脚
  • 自定义存储库基类 + QueryDslPredicateExecutor

    我已经发现QueryDslPredicateExecutor对于减少样板文件非常有用 但它似乎给工作带来了麻烦 我现在正在尝试延长JpaRepository使用自定义基类存储库 并且在启动时 Spring 无法正确实例化存储库 Custom
  • Docker:将 apt-key 与 alpine 镜像结合使用

    我正在尝试使用 alpine nodeJS docker 映像 但确实收到错误 bin sh apt key not found 我需要补充什么 FROM node 8 6 alpine RUN apt key adv keyserver
  • 输入层从深度学习模型的结构中消失

    我使用以下代码使用 VGG16 创建了 CNN 模型 但创建模型后 模型的输入层从结构中消失 见图 为什么输入层从结构中消失 vgg16 model keras applications vgg16 VGG16 model Sequenti
  • 如何使用 htaccess 规则停止直接执行 php 页面?

    在我的 htaccess 文件中 我定义了以下规则 使我的注册页面 URL 为http example com register RewriteRule register register php 上述规则完全没问题 但我可以从以下位置访问
  • C# int、Int32 和枚举

    If int是同义词Int32为什么 enum MyEnum Int32 Value 1 不编译 然而 enum MyEnum int Value 1 即使将光标悬停在 int 单词上也会显示 struct System Int32 底层类
  • FileStream 在顶部追加数据

    我正在开发一个实用程序 我想在文件顶部追加数据 但它是覆盖而不是追加 例如 考虑 file txt 这里存在一些东西 现在我想在当前行之前附加 此处存在更多内容 有没有办法可以不使用 2 FileStreams 不 文件系统基本上不支持将数
  • 如何将变量扩展到maven-archetype中的嵌套目录中

    假设我已经设置了groupId to com example and artifactId to fancy project 现在我想创建一个原型 这样在创建时会扩展为以下结构 src main com example fancy proj