project.parent.name 和parent.name 之间的区别以及在pom.xml 中使用finalName

2024-06-24

对线程的研究具有显式 FinalName 的 Maven 将无法正常工作 https://stackoverflow.com/questions/40336878/maven-with-an-explicit-finalname-wont-work-properly。我想知道 -

问题1- 有什么区别project.parent.attribute and parent.attribute在行家的pom.xml?

目前使用 Maven 3.3.9 和 intelliJ asIDE,我看到的只是两个属性都导航到相同的属性。还有一个想法是

<project>是描述符的根。

用于定义任何 pom.xml,在这种情况下,project.parent.* 应等效于parent.*对于一个模块。

问题2- 如果上述解释成立,那么finalName属性覆盖<name>当其子模块 pom.xml 调用父级的属性时?

问题3- 的价值是什么${project.name} in the finalName父模块的?是不是name父母或name最里面的[打包为jar, war等等]孩子?


Edit:带有链接/示例的扩展答案

问题1

project.parent.attribute是访问父项目属性的正确方法。parent.attribute指向相同的值,但已被弃用(Maven 3.3+ 在构建开始时明确抱怨)

(see 模型生成器 http://maven.apache.org/ref/3.3.9/maven-model-builder/,其中指出* and pom.*访问已被弃用)

问题2

name and finalName完全不相关。name是项目的明文名称(并且是子项目从未继承的少数元素之一),finalName是工件文件的名称。

如中所述POM 参考 https://maven.apache.org/pom.html#BaseBuild_Element:

最终名称:这是最终构建时捆绑项目的名称(不带文件扩展名,例如:my-project-1.0.jar)。默认为 ${artifactId}-${version}。

name:项目往往有会话名称,超出了artifactId。

所以这两者有不同的用途。

  • name纯粹是信息性的,主要用于生成的文档和构建日志中。它不会被继承或在其他地方使用。它是人类可读的字符串,因此可以包含任何字符,即文件名中不允许的空格或字符。所以,这将是有效的:<name>My Turbo Project on Speed!</name>。对于工件来说,这显然至少是一个有问题的文件名。

  • 如上所述,finalName是生成的工件的名称。它is继承的,所以它通常应该依赖属性。唯一两个真正有用的选项是默认选项${artifactId}-${version}和无版本的${artifactId}。其他一切都会导致混乱(例如名为foo创建一个工件bar.jar)。实际上,我的涡轮项目!是有效的,因为这是一个有效的文件名,但实际上,这样的文件名往往相当不可用(例如,尝试从 bash 中寻址包含 ! 的文件名)

问题3

在 pom 的解析中,首先按顺序应用所有父级,然后才解析属性(始终针对当前项目)。因此,该名称将是最里面的子项的名称(但是,请参阅上文:不要使用project.name,因为它可能包含空格和其他非法字符)

see 模型生成器 http://maven.apache.org/ref/3.3.9/maven-model-builder/欲了解更多详细信息,此处标记了相关步骤bold:

  • phase 1
    • 配置文件激活:查看可用的激活器。请注意,模型插值尚未发生,然后基于文件的激活的插值仅限于 ${basedir} (自 Maven 3 起)、系统属性和请求属性
    • raw model validation: ModelValidator (javadoc), with its DefaultModelValidator implementation (source)
      • 模型标准化 - 合并重复项:ModelNormalizer (javadoc) 及其 DefaultModelNormalizer 实现(源)
      • 配置文件注入:ProfileInjector (javadoc),及其 DefaultProfileInjector 实现(源)
      • 父级解析直到超级 pom
      • 继承程序集:InheritanceAssembler (javadoc),及其 DefaultInheritanceAssembler 实现(源代码)。请注意,project.url、project.scm.connection、project.scm.developerConnection、project.scm.url 和 project.distributionManagement.site.url 有特殊处理:如果未在子级中重写,则默认值是父级与子级的值已附加工件 ID
      • 模型插值(见下文)
      • url 规范化:UrlNormalizer (javadoc),及其 DefaultUrlNormalizer 实现(源)

因此给出两个文件(仅相关部分):

parent

<artifactId>parent</artifactId>

<name>Parent Project</name>

<properties>
  <myProp>in-parent</myProp>
</properties>

<build>
  <finalName>${project.artifactId}-${myProp}</finalName>
</build>

child

<parent>
    <artifactId>parent</artifactId>
</parent>
<artifactId>child</artifactId>

<properties>
  <myProp>in-child</myProp>
</properties>

这些步骤按以下顺序执行(仅两个重要步骤):

  • 创建一个“世代 pom”,其中包含所有 pom 直至超级 pom 的内容:

世代POM

<parent>
    <artifactId>parent</artifactId>
</parent>
<artifactId>child</artifactId> <!-- artifact id is never inherited -->

<!-- name is NOT inherited, so no name for child -->

<properties>
  <myProp>in-child</myProp> <!-- from child -->
</properties>

<build> <!-- inherited from parent -->
  <finalName>${project.artifactId}-${myProp}</finalName>
</build>

并不是说世代 pom 仍然只包含属性,而不包含值。

最后,在模型插值,性质就解决了。在这一步中,不再使用父pom,在上一步之后,一切都只在当前项目的(世代)模型上完成:

有效聚甲醛

<parent>
    <artifactId>parent</artifactId>
</parent>
<artifactId>child</artifactId> <!-- artifact id is never inherited -->

<!-- name is NOT inherited, so no name for child -->

<properties>
  <myProp>in-child</myProp> <!-- from child -->
</properties>

<build> <!-- inherited from parent -->
  <finalName>child-in-child</finalName> <!-- resolved against generational pom -->
</build>

一般来说,finalName应小心使用。删除本地生成的工件中的版本可以使本地容器中的测试更容易(${project.artifactId}而不是默认的${project.artifactId}-${project.version}),但我强烈建议不要使用其他任何东西,因为上传的工件(到存储库)无论如何都会将原始的artifactId作为文件名,并且对于同一文件使用不同的名称可能会造成混淆。

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

project.parent.name 和parent.name 之间的区别以及在pom.xml 中使用finalName 的相关文章

  • 如何配置maven以使用servlet 3

    我想升级我的 web 应用程序以使用 servlet 3 0 插入 2 5 我正在使用 WebLogic Server 版本 12 1 1 0 12c maven java 7 10 和 NetBeans 7 3 1 由于某种原因 唯一可用
  • Eclipse Indigo 中 Maven 的依赖关系层次结构视图

    似乎无法使用最新版本的 eclipse Indigo SR2 获取依赖关系层次结构视图 这post https stackoverflow com questions 6475927 maven pom editor dependency
  • 编辑 XDocument 中的特定元素

    我最近开始学习C 使用时遇到了问题XML Linq存储数据 我希望这个问题是可以理解的 因为我还不熟悉所有正确的术语 而且英语不是我的母语 我读了很多问题 谷歌搜索 但我自己无法弄清楚 我想更新现有的 XDocument 文件 如下所示
  • Codemirror光标位置偏移

    我正在使用代码镜像在网页中显示 突出显示和编辑 xml 但我遇到了光标位置偏离插入位置的问题 因此 如果从闪烁光标所在的位置删除字符 则删除之前的字符您期望的那个会被删除 我假设它与我当前页面存在 css 冲突 因为它在我的页面之外运行良好
  • 从 Axios 响应中解析 XML,推送到 Vue 数据数组

    在我的 Vue 应用程序中 我使用 Axios 获取 XML 文件并使用parseString将 XML 解析为 JSON 然后我需要通过result到 Vue 数据 this events My console log将解析后的 XML
  • Lambda 的 AWS 开发工具包 V2 Maven 库是什么?

    我正在尝试更新我的项目 以便通过 bom 配置来使用 SDK v2 我已经更新了我的 pom 文件 但现在RequestHandler and Context找不到 这是我的 Maven 配置文件
  • 从源代码构建 HikariCP

    我想更换BoneCP with HikariPC 已下载tar gz from here http brettwooldridge github io HikariCP 并提取 我不知道这是否是一个正确的命令 但在里面hikaricp ja
  • jQuery 自动完成 - xml 跨站点请求

    我的自动完成功能的 XML 提要位于另一台服务器上 是否有客户端 javascript 方法来获取此 XML 文档 我知道我可以使用 php jsp 等创建代理 但我需要在所有客户端完成此操作 这就是我现在调用该文件的方式 该文件仅在同一域
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 如何将空字符串编组到单个标签

    我有我的对象 配置了代码 object setName 编组为以下 XML
  • 使用 XML 文档部署 Web API 项目时,构建服务器上“访问被拒绝”

    为了使用 Web API 帮助页面为我的 Web API 项目生成 XML 文档 我必须检查项目属性的 构建 部分下的 XML 文档文件 选项 当我在本地构建时 这会正确生成文档 但是 当我签入时 我在构建服务器上收到以下错误 CSC 生成
  • SQL Server XQuery 返回错误

    我正在 SQL Server 2012 中对 XML 数据类型列执行查询 数据示例如下
  • Atom feed xmlns 属性搞乱了 AS3 的 XML 解析?

    想看一些有趣的东西吗 var xml XML XML
  • Magento 使用soap v2 创建类别

    我想通过 Web 服务请求 soap v2 在 Magento 中创建类别 我使用 Magento 1 4 2 0 正如我所说 magento SOA API v2 如果我发送请求 我会收到以下错误作为响应
  • Xpath 中不同吗?

    我有这个 XML 文件 我想从中计算其中引用的用户数量 但它们可能出现在多个类别中 我希望不要考虑这些重复项 在下面的示例中 查询应返回 3 而不是 4 XPath 有没有办法做到这一点 用户根本没有排序
  • XML 文档可以同时遵循 DTD 和 XML 模式吗?

    XML 文档指定它遵循 DTD 是否合法 and一个架构 两者不会互相冲突吗 从技术上讲 我认为 DTD 无法识别引用架构的属性 名称空间声明和架构位置 会遇到问题 不过 我认为这取决于您如何验证 XML 以及如果指定了架构 您是否可以忽略
  • android:onClick 在 xml 中的 menuitem 上设置

    亲爱的 我们可以在 xml 中将 onclick 与菜单项一起使用吗 就像下面一样 我尝试过但它不起作用 menu menu
  • 在 Scala 中修改 XML 而不进行突变?

    我正在尝试替换 XML 片段 并且在此过程中需要一个累加器 假设我有一个填空题存储为 XML 如下所示 val q
  • Maven javadoc - 如何包含集中资源

    我试图将集中资源 例如图像文件 js 文件 包含到我的 Maven 生成的 javadoc 中 这种集中的资源将来自于依赖性 就我而言 我希望始终包含某些资源 Javascript 文件 这样可以在 Javadoc 中对示例代码进行良好的语
  • DocumentBuilder 解析产生无效字节 2 of 4 字节 UTF-8 序列错误

    我正在尝试解析包含字符串的字节数组Impresi n in XML final DocumentBuilderFactory builderFactory DocumentBuilderFactory newInstance final D

随机推荐

  • 单击另一个元素时触发下拉选择框

    我正在尝试 替换 选择输入上的按钮 我查看了 jquery 中的选择替换插件 但在我看来它们都有点臃肿 我想要实现的是一个简单的跨度 位于选择框的下拉按钮上 单击它时使选择选项下降 这是我所拥有的 document ready functi
  • 错误:使用替代方法写入重载方法值:

    我正在尝试读取固定宽度的文件并将其写入文本文件 下面是代码 输入文件布局字段的长度 4 10 3 5 3 1 1 5 7 094482018 07 10 022 14012 000 0 30000A 002290 059412018 07
  • CSS 中的下拉菜单?

    我正在寻找一种构建下拉菜单的方法 基本上 我有一个网站 底部有不同的按钮 其中一些应该有下拉菜单 以便鼠标悬停时在其上方显示一些按钮 哦 我想要一个不需要大型库甚至不需要 javascript 的解决方案 但这只是因为它更干净 使用 jav
  • 确定时间序列数据的 SOM(自组织映射)中的集群成员资格

    我也在做一个需要对时间序列数据进行聚类的项目 我正在使用在 MATLAB 中运行的 SOM 工具箱进行聚类 但遇到了以下问题 我们如何确定哪些数据属于哪个集群 SOM从数据集中随机选择数据样本 并为每个数据样本找到BMU 据我所知 SOM算
  • 带空格的 Elastic Search 通配符查询失败 7.11

    我在 7 11 版中将我的数据编入弹性搜索索引 这是我直接将文档添加到索引时得到的映射 properties name type text fields keyword type keyword ignore above 256 我还没有添
  • jQuery 承诺是否符合 Promises/A+

    我读过了本文 http thewayofcode wordpress com 2013 01 22 javascript promises and why jquery implementation is broken 这是基于著名的多梅尼
  • Eclipse 无法识别智能卡库

    从 Sun 的 jdk 1 8 迁移到 Openjdk12 后 Eclipse 无法识别 javax smartcardio 的整个库 例如 import javax smartcardio Card 会导致错误 Card cannot b
  • 如何有条件地使用 Perl 中的模块?

    我想在 Perl 中做这样的事情 Module1 ReportHashFile1 ReportHashFile1 pm Module2 ReportHashFile2 ReportHashFile2 pm if Condition1 use
  • 从 `.` `data.table` 导入,以便 lintr 识别它

    跑步时lintr https github com jimhester lintr在 R 函数上使用data table我收到以下警告 warning no visible global function definition for Di
  • 带有 dcast data.table 的宽格式[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想转换这样的表 set seed 1 mydata lt data frame ID rep 1 4 each 3 R rep
  • 将 IIFE 的公共成员分配给变量与返回对象有什么区别

    我最近查看了大量 JavaScript 代码 并且看到了使用分配 IIFE 的 公共 属性的两种不同方法 第一个是创建一个变量并将该变量分配给 IIFE 内部的属性 如下所示 var public1 function var foo Foo
  • 在 Microsoft Graph 中查找 Azure AD 架构扩展 AppId

    如果通过 Azure AD Connect 同步自定义属性 则会对 Azure AD 进行架构扩展 并且在 Azure AD 中创建一个关联的应用程序 其中包含DisplayName 租户架构扩展应用程序 不幸的是 这些扩展名都是唯一的 并
  • 使用 R 将逗号分隔的列表值转换为稀疏矩阵

    在新的数据结构中 每个segmentId应该变成一个列名 每个 personId 仍应有一行 id SegmentId 单元格是分段 ID 在逗号分隔列表中出现的次数的计数 下面的例子 按原样 我正在尝试以这种形式转换数据 PersonID
  • Android - 通过更新进度栏下载文件

    我的 Dropbox 帐户中有多个文件 我成功下载文件 但我想显示带有百分比的进度条 以便在下载所有文件时 进度条完成 我正在使用 AsyncTask 下载文件 这是我的代码 public void onPreExecute mDialog
  • 数据结构格式(YAML 或其他)的往返解析保留注释,用于编写配置

    我一直在多个应用程序中使用 YAML 作为配置文件格式 一切都很顺利 除了一件事 当我的程序需要在 YAML 配置文件中写入 修改配置变量时 它会通过加载和转储整个文件来破坏格式和注释 结构 嗯 实际上 YAML 还有另一个问题 大多数用户
  • 在 C# 中设置树节点的父节点的正确方法?

    我正在研究一棵定制树 每个节点 BindingNode 是我对它们的称呼 都包含一个 BindingNodeCollection 它实现收藏 http msdn microsoft com en us library 92t2ye13 as
  • Android sqlite 日志报告和 db.close()

    日志报告数据库或游标未关闭 我基本上有一个带有自定义表面视图的活动 并使用处理程序向活动报告 当我收到消息时 我会显示一个警报对话框并更新数据库 private Handler handler new Handler public void
  • QImage 转换为 QML

    我的应用程序通过网络接收 JPEG 实时流 每秒 16 帧 直播流应使用 QML 显示 接收部分是用C 编写的 所有UI都是用QML编写的 如何将图像数据输入 QML 窗口 我已经研究过如何显示 QImage 但还没有找到解决方案 实现 Q
  • 当恰好有一个选项非空时执行某项操作

    如果两个选项之一非空 我想计算一些东西 显然这可以通过模式匹配来完成 但是有更好的方法吗 o1 o2 match case Some o None gt Some compute o case None Some o gt Some com
  • project.parent.name 和parent.name 之间的区别以及在pom.xml 中使用finalName

    对线程的研究具有显式 FinalName 的 Maven 将无法正常工作 https stackoverflow com questions 40336878 maven with an explicit finalname wont wo