在 Gradle 中,如何生成具有解析为实际使用版本的动态依赖项的 POM 文件?

2023-11-23

在 Gradle 中,如何生成具有解析为实际使用版本的动态依赖项的 POM 文件?

dependencies {
    testCompile(group: 'junit', name: 'junit', version: '4.+')
}

这是从上面的依赖关系生成的。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.+</version>
        <scope>test</scope>
    </dependency>
</dependencies>

我想要拥有+解决为应计版本,如下所示。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle 指南中的章节梅文出版公司谈论这样做,但没有提及如何做。

使用这个钩子,您可以修改 POM 的任何方面。例如,您可以将依赖项的版本范围替换为用于生成构建的实际版本。

Solution

使用 Peter Niederwieser 的答案中的信息,我创建了一个任务,该任务读取包含动态依赖项的 POM,并用已解决依赖项的新 pom 覆盖它。

/**
 * Reads and Overwrites POM file resolving dynamic dependencies
 */
task cleanPom(dependsOn: writeNewPom) << {
    // Get existing pom file
    Node xml = new XmlParser().parse(pomFileLocation)

    // Generate map of resolved versions
    Map resolvedVersionMap = new HashMap()
    Set<ResolvedArtifact> resolvedArtifacts = configurations.compile.getResolvedConfiguration().getResolvedArtifacts()
    resolvedArtifacts.addAll(configurations.testCompile.getResolvedConfiguration().getResolvedArtifacts())
    resolvedArtifacts.each {
        resolvedVersionMap.put(it.getName(), it.getModuleVersion().getId().getVersion())
    }

    // Update dependencies with resolved versions
    xml.dependencies.first().each {
        Node artifactId = it.get("artifactId").first()
        def artifactName = artifactId.value().first()
        def artifactVersion = resolvedVersionMap.get(artifactName)

        Node version = it.get("version").first()
        version.value = artifactVersion
    }

    // Overwrite existing pom file
    new XmlNodePrinter(new PrintWriter(new FileWriter(pomFileLocation))).print(xml)
}

需要付出一些努力来编写此代码。两个主要部分是:

  • 使用以下命令查询已解析的版本Configuration#getIncoming or Configuration#getResolvedConfiguration API
  • 使用 Groovy 操作 POMXMlParserAPI(假设新的maven-publish使用插件)

有关信息ConfigurationAPI 可以在Gradle 构建语言参考,进一步链接到 Javadoc。 完整的 Gradle 发行版包含微小样本演示 POM 操作。相关信息XmlParser可以在 Groovy 文档中找到。

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

在 Gradle 中,如何生成具有解析为实际使用版本的动态依赖项的 POM 文件? 的相关文章

  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • Gradle SignArchives 无法读取 Secret Key

    我正在尝试将我的 Java 库发布到 Maven Central 其中一部分涉及使用signinggradle 插件来签署工件 我需要在不使用密钥环文件的情况下对其进行签名作为此处的文档 https docs gradle org curr
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 访问 maven-release-plugin 的发布版本

    我在 Jenkins 作业中使用 maven release plugin 并且在执行 shell 脚本时启用了 在 SCM 运行之前运行构建步骤 我想访问此 shell 脚本中的发布版本 但无法访问它 我不确定这个插件中存储发布版本的变量
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐

  • 使用 HTML5 Canvas 进行图像处理和纹理映射?

    在我正在开发的 3D 引擎中 我成功地绘制了 3D 立方体 就我而言 填充侧面的唯一方法是使用纯色或渐变 为了让事情变得更令人兴奋 我真的很想使用简单的位图来实现纹理映射 关键是我几乎找不到任何关于 JavaScript 图像处理主题的文章
  • Python 使用“quoted-printable”传输编码和“utf-8”内容编码发送电子邮件

    蟒蛇的email mime倾向于使用编码base64 or 7bit and us ascii 我想用quoted printable and utf 8因为这对于人类来说更容易阅读和调试 目前 我的电子邮件看起来像 61353500484
  • Python setup.py 调用 makefile 不包含二进制文件

    一些上下文 我有一些 C 代码 编译后我可以在终端中调用 如下所示 my excec params它生成一些我在 python 中使用的文件来生成图表和其他内容 我想将所有内容打包到 python 库中 包括 C 代码和 python 代码
  • 将事件处理程序添加到新创建的元素

    我正在尝试将新元素添加到有序列表中 并带有删除链接 list ol append li label a href remove a li 但这不起作用 a href remove on click function event alert
  • Stripe Webhook 错误:未找到与负载的预期签名匹配的签名

    我正在使用 Stripe 提供的代码来测试 webhook Stripe 机密和端点机密已经过三次检查 条纹版本 6 19 正文解析器 1 19 当我在 Stripe 仪表板上测试 webhook 时 得到结果 Test webhook e
  • 如何在 Swift 中实现 AudioServicesSystemSoundCompletionProc?

    我正在尝试在 Xcode 中使用 Swift 为 AudioServicesAddSystemSoundCompletion 中的参数创建 AudioServicesSystemSoundCompletionProc 的实例 但失败了 这是
  • Android 以编程方式配对后自动连接蓝牙设备

    在我的应用程序中 我需要配对蓝牙设备并立即与其连接 我有以下功能来配对设备 public boolean createBond BluetoothDevice btDevice try Log d pairDevice Start Pair
  • Margin-top: 100% 获取父宽度值...奇怪

    我在大多数浏览器 即 ff chrome safari 上遇到了非常奇怪的 问题 这是示例代码
  • Android 重试 onErrorResponse 请求

    当我收到错误时错误响应android volley 请求我想重试该请求 我怎样才能做到这一点 好吧 你可以创建RetryPolicy要更改默认重试行为 只需指定timeout milliseconds retry count论据 publi
  • XPath 选择内部文本

    我有这个 HTML XML t t t t t r n t t a href test aspx span class test b blabla b span a br this is the text I want br span cl
  • Clock_getres 的使用 - Linux C 新手

    我正在尝试确定 Linux 机器上计时器的粒度 根据clock getres的手册页 我应该能够使用这个片段 include
  • Excel - VBA:将变量从子传递到用户窗体

    我已阅读并应用了在类似主题上找到的解决方案 但似乎对我的情况没有任何作用 因此 我想将一个变量从 Module1 的一个子模块传递到用户窗体 这是一个名为 provinceSugg 的字符串 这是我的代码的相关部分 Public provi
  • 在二维数组中创建相似元素集

    我正在尝试解决基于二维数组的问题 该数组包含不同类型的元素 总共 3 种可能的类型 让我们假设类型为 X Y Z 该数组看起来是这样的 请注意 它总是被完全填满 该图仅供说明之用 7 6 5 4 X Z Y X 3 Y X Y Y X 2
  • 什么是好的Jsp IDE

    我是一名 C 开发人员 但有一份涉及一些 jsp 代码的工作 我一直在使用记事本 它在突出显示方面做得很好 但我缺少智能感知 并且发现很难找到我需要的方法 对于喜欢 C 并具有智能感知功能的人来说 什么是好的 jsp IDE Update
  • 在 bash 无限循环期间禁用用户输入

    我有这个 bash 脚本 它基本上启动带有进度指示器的 Web 和 selenium 服务器 由于硒服务器启动需要一些时间 我正在无限循环中检查状态 问题是 在等待它启动时 我不小心按下了按键 它会显示在屏幕上 如果循环结束 超时 它也会显
  • C# 中的 HTTP 代理服务器

    我的公司正在尝试使用 NET Fx 3 5 和 C 编写代理服务器 来自我们的research我读到 HttpListener 不是代理服务器的良好候选者 尽管我不确定为什么 我们目前正在与Mentalis代理示例源代码尽管这将涉及到实现我
  • 如何在屏幕之间切换?

    我是 Android 开发世界的新手 我创建了简单的应用程序 并通过一个按钮创建了一个简单的 GUI 如果用户按下此按钮 我想更改屏幕以显示其他 GUI 我怎样才能做到这一点 你可以这样做 import android view View
  • Golang - 如何从代码内部显示模块版本

    我正在编写两个二进制文件 它们都使用两个库 我们可以称它们为 libA 和 libB 每个库都位于专用的 git 存储库中 并使用 git 标签来声明版本 例如 libA 的版本为 v1 0 9 libB 的版本为 v0 0 12 两个二进
  • 所有小提琴的面积相同,与 ggplot2 中的面无关

    我想为三个不同的因素创建一个图 其中所有小提琴都具有相同的面积 但使用facet grid C 似乎迫使每个方面内的小提琴 即仅在因子 C 水平内的小提琴 具有相同的面积 我怎样才能克服这个问题 library ggplot2 d lt d
  • 在 Gradle 中,如何生成具有解析为实际使用版本的动态依赖项的 POM 文件?

    在 Gradle 中 如何生成具有解析为实际使用版本的动态依赖项的 POM 文件 dependencies testCompile group junit name junit version 4 这是从上面的依赖关系生成的