面向复杂软件的 Build 自动验证解决方案

Grok Build 实战指南:从环境配置到复杂工作流自动化 自动化工具是现代软件开发流程中的核心组件,旨在通过预设规则或智能调度减少人工重复操作,提升工程效率。其原理在于将任务分解为可执行的动作序列,并通过集成外部工具链来协调完成。这类技术的核心价值在于降低自动化门槛,使开发者能更专注于业务逻辑创新。典型的应用场景包括持续集成与部署(CI/CD)、跨平台任务编排以及日常运维脚本的智能化执行。本文聚焦于 Grok Build 这一新兴工具,它通过自然语言理解驱动任务自动化,显著降低了编写和维护复杂工作流的技术门槛。文章深入探讨了其环境配置、核心概念如指令解析与上下文管 阅读详情

Build 验证测试(Build Verification Test)是测试过程的第一步,通常只对软件的主干功能进行初步测试,通过验证的 Build 才能转给功能测试人员进行大规模的细化测试,以此确保功能测试人员不会由于安装坏 Build 而浪费时间。

在持续集成的软件开发过程中,构建(Build)服务器一般每天都会编译最新的源代码并构建新的 build,这就要求 Build 验证也以同样的频率紧随进行。另一方面,由于软件的主干功能通常比较稳定,所以 Build 验证的重复性较强。正是因为这两个特点,各软件产品的 Build 验证都力图实现 100% 自动化。

相对 Build 的手工验证,自动验证能够带来以下好处:

  • 让 Build 验证人员从枯燥的,简单的重复性测试中解脱出来。
  • 自动验证的执行速度比手工验证更快,允许开发人员在最短的时间内获知新 Build 中存在的严重问题,并进行及时修复,功能测试人员也能更快获取值得信赖的新 Build 。
  • Build 自动验证系统 7 × 24 小时工作,不受白天黑夜以及人员假期的影响。当 Build 验证人员和开发(及功能测试)人员在时区和国度上存在差异的时候,手工验证就容易滞后。

但是,Build 验证的自动化在前期需要较大的开发工作量。另外,如何使得 Build 自动验证系统能够长期稳定运行,也是一个棘手的问题。任何一个环节的错误(例如,软件安装测试后的环境清理),都会造成系统崩溃。虽然不同软件的 Build 自动验证的具体实现五花八门,但本文力图提取其中的不变部分,给出一个具有一般性意义的 Build 自动验证解决方案。此方案已被用于 Websphere Business Monitor 的 Build 自动验证,实际运行结果证明其能在无人干预的情况下长期稳定运行。

Build 验证的自动化解决方案

源代码配置管理服务器和构建(Build)服务器是自动化开发环境的一个基本子集,构建(Build)服务器定期编译最新源代码,并生成面向测试人员的 Build 。为了在自动化开发环境中增加 Build 自动验证的功能,这个基本拓扑需要被进一步扩展。如图 1 的红框部分所示,我们添加了构建(Build)验证服务器和验证结果发布服务器。


图 1. 带 Build 自动验证的自动化开发环境

 

 

构建(Build)验证服务器

构建(Build)验证服务器运行 Build 自动验证程序。如何启动 Build 自动验证程序?一般来说,有以下两种方案:

  1. 由构建(Build)服务器触发。构建(Build)服务器每次生成新的 Build 之后,主动启动构建(Build)验证服务器上的 Build 自动验证程序。
  2. 由构建(Build)验证服务器触发。构建(Build)验证服务器定时轮询构建(Build)服务器,一旦发现新的 Build,则马上下载验证。

考虑到构建(Build)服务器的重要性,Build 自动验证应该尽量避免对它的影响。方案 1 显然要求修改构建(Build)服务器上的构建脚本,而方案 2 则对其没有任何影响,所以我们选择方案 2 。

Build 自动验证程序按图 2 所示步骤循环执行。


图 2. Build 自动验证程序

 

验证结果发布服务器

Build 验证结果需要被持久化存储,所以我们引入验证结果发布服务器,开发人员和测试人员可以通过浏览器查看所有 Build 的验证结果。图 3 展示了验证结果发布服务器的具体实现,构建(Build)验证服务器和发布服务器通过数据库交互,并通过一个 Web 程序进行结果发布;图 4 则是一个典型的验证结果发布的实例。


图 3. 验证结果发布服务器的具体实现

 

图 4. 构建(Build)验证结果发布

 

验证结果发布程序的实现相对简单,我们对此不作展开。 Build 自动验证程序则是整个解决方案的核心,下面对它的所有步骤逐一说明。

轮询下载 Build

Build 的下载一般通过 FTP 协议完成,虽然 Windows 和 Unix 的命令脚本都提供相信的 FTP 支持,但用命令脚本不易实现各种错误(例如网络错误或者 Build 服务器不可访问)的处理逻辑,因此脚本运行的容错性和稳定性相对较差。而 Build 自动验证程序要求在无人干预的情况下 7 × 24 小时工作,所以我们选择 Java 实现 Build 轮询下载。图 5 是 Build 轮询下载的基本流程,BuildDownload.java 则是该流程的具体实现。


图 5. Build 轮询下载流程

清单 1. BuildDownload.java

安装 Build

Build 本身必须提供命令行安装模式,具体过程如下。

  1. 解压刚下载的最新 Build
  2. 启动 silent install (安装所需的配置文件必须预先定义好)
  3. 检查安装日志,确认没有错误发生
  4. 初步验证安装结果,例如文件系统,数据库,以及创建在 Websphere 应用服务器中的各种配置对象等。

Build 成功安装是执行功能测试用例的前提。如果验证程序无法检测出 Build 安装失败,则其在继续执行功能测试用例时,测试用例必然失败,验证程序虽然仍能判断 Build 是坏的,但问题定位却是错误的:某功能测试用例失败,实际则是安装失败。

为避免这种情况的发生,就要求对实际安装结果进行适当验证。通常来说,简单的日志检查并不充分,我们还要预先搞清正确的安装结果,并以此为标准对实际安装结果进行验证,如文件系统和数据库等。

执行主干功能测试用例

Build 验证只对软件的主干功能进行初步测试,不同软件的测试用例各不相同。在测试用例的自动化开发中,需要注意以下几点:

  • 尽量选择相对稳定的系统级接口,如各模块的命令行脚本,J2EE 应用服务器的 mbean 等。这样可以使 Build 自动验证程序长时间稳定运行,而无需频繁修改。
  • 对测试用例执行结果进行严格验证,如检查返回代码,日志文件,以及用例生成的各种对象(如数据库记录等),以此提高对坏 Build 的问题自动定位的准确度。
  • 避免图形用户界面(GUI)的细节测试。因为在一个完整的软件开发周期中,GUI 的实现是一个渐进的过程,因此它们的自动化测试脚本也需要经常更新。这与 Build 自动验证程序的稳定性要求相背。
  • 避免陷入底层的 API 测试,一方面底层 API 本身并不稳定,另一方面单元测试已经覆盖底层 API 的测试。

发布 Build 验证结果

构建(Build)验证服务器需要把 Build 验证结果存储到验证结果发布服务器,两者通过数据库交互,数据库结构可参考 BVT(Build Verification Test)DDL 。


清单 2. BVT DDL

验证结果发布通常包含以下步骤:

  • 将测试用例的执行结果存储到验证结果发布服务器。
  • 将 Build 验证过程的相关日志存储到验证结果发布服务器。
  • 将 Build 验证结果通过 email 发送给相关的测试开发人员。
  • 如果被验证 Build 是坏的,则自动在 Bug 追踪系统(如 CMVC)中生成 Defect 。

清理测试环境

Build 验证结果发布以后,必须清理测试环境,为下一个 Build 做好准备。这个步骤非常重要,由于构建(Build)验证服务器需要在无人干预的情况下 7 × 24 小时连续运行,如果环境清理不成功,则可能引起下一次 Build 自动验证的失败,甚至导致构建(Build)验证服务器发送错误的 Build 验证报告。一般来说,有以下几种清理测试环境的方法:

  1. 调用软件本身的卸载命令。由于软件开发过程中,卸载命令本身可能并不完善,出错的可能性很大,所以该方法使用较少。
  2. 直接编程删除文件系统的相关文件,数据库中的相关对象,甚至操作系统中的相关配置。该方法可靠性较好,但需要较大的开发工作量,而且在整个软件开发周期中,可能需要经常修改环境清理程序。尤其当被验证的软件需要安装在其他软件之上的时候,环境清理问题会变得更加复杂。
  3. 准备一个干净的测试环境(如果被验证软件需要安装在其他软件之上,则可事先安装好相关的软件),然后用 Ghost(或其他备份软件)做硬盘备份,清理测试环境时只要简单的从备份映像恢复即可。

方案 3 简单可靠,而且适用于复杂软件(即被验证软件需要安装在其他软件之上)。在 Windows 上,我们可以配置一个任务计划(Scheduled Task)使得自动验证程序在备份映像恢复时能够自启动。

 

 

结束语

构建(Build)自动验证可以作为自动化开发环境的一个增强环节,通过对软件主干功能的初步测试,尽快将严重错误报给开发人员,并为测试人员过滤掉不符合要求的坏构建(Build)。本文给出的 Build 自动验证解决方案具有较强的通用性,但应用到具体软件的构建(Build)自动验证时,仍需选择适当的功能测试用例,尤其要注意对测试用例执行结果的严格验证,以提高对坏构建(Build)中的问题的自动定位的准确度。

Grok Build:构建可验证的AI-Native CLI工作流 CLI(命令行接口)作为软件工程中最稳定、可脚本化、可管道化的交互范式,正迎来与大语言模型深度集成的关键拐点。其核心原理在于将AI能力封装为具备明确输入输出契约、可版本控制、可沙箱执行的原子化命令原语,而非依赖不透明的云端API调用。这种AI-Native CLI架构显著提升了AI能力在CI/CD、数据库审查、代码自动化等场景中的确定性、安全性和可审计性。技术价值体现在环境无关的静态二进制交付、声明式约束编程替代脆弱提示工程、以及面向专用模型矩阵的灵活编排能力。本文聚焦Grok Build框架,深入解析其构 阅读详情

相关推荐

Grok Build:简化CI/CD流程,赋能非技术用户参与软件交付

在现代软件工程中,持续集成与持续部署(CI/CD)是提升交付效率的核心实践,其原理在于通过自动化流水线将代码变更快速、可靠地集成与发布。这一技术价值在于缩短反馈周期、减少人为错误并加速产品迭代。典型的应用场景包括自动化测试、构建打包及多环境部署。然而,传统CI/CD工具(如Jenkins、GitLab CI)的配置复杂性往往将非技术角色(如产品、运营人员)挡在门外。Grok Build正是针对这一痛点提出的解决方案,它并非一个全新工具,而是一种对现有工具链进行封装与简化的理念演进。其核心思想是通过抽象与封装

weixin_34226706的博客 446

脚本集合

-- 全职业训练师 insert into `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `...

weixin_30362233的博客 302

Sublime Text 4 Build 4126 补丁更新指南

Sublime Text 4 Build 4126是一个备受开发者欢迎的代码编辑器,它以轻量级、快速和强大的特性而闻名。这一章节将为不熟悉Sublime Text的读者提供一个基础概览,并详细探讨其最新版本4126的主要特性和更新亮点。此版本不仅提升了性能和稳定性,还引入了一系列的改进和新功能,从语法高亮到多选和分割编辑,以及新增的插件管理和改进的用户界面设计。此章节将帮助读者理解Sublime Text 4 Build 4126在现代开发环境中的重要性和其潜在的业务价值。

weixin_30838971的博客 900

Grumbo'z VIP Engine

Grumbo'z VIP Engine --Built Tested and Approved for TrinityCore C++-- This is just the VIP Engine with basic features: This allows for an adjustable Max VIP level (default 6).VIP can

mysouling的专栏 752

buildtest

buildtest

Build-test

Prometheus Go客户端库 这是的客户端库。它包含两个独立的部分,一个用于检测应用程序代码,另一个用于创建与Prometheus HTTP API对话的客户端。 该库需要Go1.13或更高版本。 有关释放和稳定性的重要说明 该存储库通常遵循。但是,仍将prometheus / client_golang / api /…中的API客户端视为实验性的。 API客户端的重大更改不会触发新的主要版本。对于在CHANGELOG.md中显式标记为EXPERIMENTAL的所选其他新功能,也是如此。 在,对需要对存储库的稳定部分进行重大更改的功能进行了批处理和跟踪。目前,v2开发在进行。一旦达到足够的稳定性,v2就会释放该分支。考虑到该存储库的广泛使用,v1和v2将共存一段时间以实现方便的转换。 仪表应用 包含检测库。请参阅Prometheus网站上的,以了解有关检测应用程序的更多信息。

构建验证测试BVT--Build Verification Test

先来讲一下VT(Verification Test),再讲BVT是个神马东东。 VT是是一系列验证测试(Verification Test)的总称。现在做的叫PVT,即Performance Verification Test(PVT属于黑盒测试,即使能看到源码,但不会对源码修改,PVT有专门的测试源码,但也不会对其修改,只会上交测试报告,有可能是由工具自动化生成,其次手工撰写),此外还

cleverlzc的专栏 2914

如何实施Build验证测试

如何实施Build验证测试软件测试BVT作为Build的一部分,主要是通过对基本功能、特别是关键功能的测试,保证新增代码没有导致功能失效,保证版本的持续稳定。个人认为实现BVT方式是有以下几种:1、测试人员手工验证关键功能实现的正确性。特点:这是传  如何实施Build验证测试 软件测试  BVT作为Build的一部分,主要是通过对基本功能、特别是关键功能的测试,保证新增代码没有导致功能失效,保证版本的持续稳定。  个人认为实现BVT方式是有以下几种:  1、测试人员手工验证关键功能实现的正确性。  特点:这是传统开发方法中,通常采用的方式。无需维护测试脚本的成本,在测试人力资源充足,测试人员

github的verified标签是什么

现象 看github仓库的提交记录,发现通过github网页提交的评论,或者改的代码都有Verfied标签,而我自己提交的代码都没有该标签。 原因 Verified标签表示,这个commit确实是commiter本人所为,而没有该标签未必是本人提交的。这个好理解,因为github的提交log中的提交人可以随意修改。 如果想本地提交代码也有标签,可以通过使用gpg密钥验证github提交。使用gp...

永立的专栏 6618

【C语言基础】野指针与空指针

全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香! 文章目录一:野指针1.1 :野指针的成因2.1 :规避野指针二:空指针 一:野指针 概念:野指针就是指向的内存地址是未知的(随机的,不正确的,没有明确限制的)。 说明:指针变量也是变量,是变量就可以任意赋值。但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向

qq_43727529的博客 2万+

深入解析CRC16查表法:从原理到Modbus协议实践

本文深入解析了CRC16查表法的核心原理与实现,重点阐述了其“空间换时间”的优化思想。通过对比直接计算法,详细说明了查表法如何通过预计算表格将计算速度提升数十倍,并提供了完整的Modbus CRC16查表法代码生成、解析及实战避坑指南,帮助开发者在嵌入式及工业通信场景中高效实现可靠的数据校验。

weixin_29166013的博客 555

服务器阵列状态显示verify,[转载]转载:关于RAID--Build/Verify&Clear&Quick Init众说

转载:关于RAID--Build/Verify&Clear&QuickInit众说1. Quick Init:产生阵列不做初始化Clear: 向所有阵列成员写0Build: 从原盘拷贝数据到目标盘2. Build/Verify 是在创建RAID时创建并校验RAID信息。Clear是创建时清空所有数据Quick Init是创建时执行快速初始化3. Build - Copies d...

weixin_28909503的博客 4540

AUTOSAR E2E Protocol实战:Profile1到Profile5的配置差异与最佳实践

本文深入解析AUTOSAR E2E Protocol中Profile1到Profile5的核心配置差异与适用场景。针对经典CAN、CAN FD及以太网等不同总线,详细对比了计数器、CRC、DataID等关键参数,并结合实战代码与配置示例,为工程师根据功能安全等级、数据长度与带宽限制选择最佳Profile提供了清晰的选型路径与工程实践指南。

milk5的博客 943

Grok Build:自然语言驱动的自动化工作流引擎

自动化工作流是现代软件工程中连接业务需求与系统执行的关键范式。其核心原理在于将模糊的人类意图转化为可验证、可复用、可审计的确定性执行序列。相比传统构建工具(如Gradle、npm)聚焦于代码编译与打包,新一代工作流引擎更强调语义理解、原子操作编排与跨系统协同,具备显著的技术价值:降低开发门槛、缩短交付周期、提升运维韧性。典型应用场景涵盖数据同步、报告生成、多平台通知、定时巡检等中频次、中复杂度任务。Grok Build正是这一演进方向的代表性实践,它深度融合Plan Mode规划、Imagine视觉化与CL

weixin_30596735的博客 477

基于立创·天猛星MSPM0G3507的简易PID电机控制入门项目实战

本文详细介绍了基于立创·天猛星MSPM0G3507开发板的简易PID电机控制入门项目实战。从硬件选型、电路设计、PCB布局,到软件编程中的编码器读取、PID算法实现与调参,手把手教你完成一个带屏幕显示的电机定速与定距控制项目,是学习嵌入式开发和经典PID控制算法的绝佳实践。

weixin_42596011的博客 510

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 419

Grok Build:简化构建工具如何赋能非技术用户参与软件开发

在软件开发领域,构建工具和自动化流程是提升效率的核心技术。其原理在于通过抽象和封装,将复杂的编译、依赖管理和部署任务自动化,从而降低开发门槛。这一技术的核心价值在于实现开发流程的标准化与效率提升,尤其在快速原型验证和内部工具开发等应用场景中作用显著。如今,以 Grok Build 为代表的简化构建趋势,正将这种能力延伸至非技术用户群体。它通过消除环境配置、依赖管理和部署运维等传统绊脚石,让产品经理、设计师等业务人员也能将想法快速转化为可运行的服务或应用。这不仅是工具的创新,更代表了软件开发民主化和低代码/无

weixin_30530939的博客 347

【迁移学习综述】

迁移学习的目标是将某个领域或任务上学习到的知识应用到不同的但相关的领域或问题中。迁移学习的研究来源于一个观测:人类可以将以前的学到的知识应用于解决新的问题,更快的解决问题或取得更好的效果。迁移学习被赋予这样一个任务:从以前的任务当中去学习知识(knowledge)或经验,并应用于新的任务当中。换句话说,迁移学习目的是从一个或多个源任务(source tasks)中抽取知识、经验,然后应用于一个目标领域(target domain)当中去。

afadgas的博客 4319

Grok Build:面向意图的智能构建协调器原理与实战

构建工具是软件工程中连接开发意图与自动化执行的核心枢纽。从 Make 的文件依赖、Just 的命令抽象,到现代基于语义理解的构建协调范式,其演进本质是降低‘人脑翻译成本’的过程。Grok Build 以 Plan Mode、TUI 和 ACP(自适应控制平面)为技术支点,将自然语言需求实时解析为带上下文约束的可执行计划,实现代码即配置(Code-as-Config)的工程落地。它不替代 CI/CD 或包管理器,而是作为‘构建协作者’嵌入开发者工作流,在安全边界内动态建模 Git 状态、依赖指纹与环境策略,支

weixin_33853794的博客 387

Unreal 从入门到进阶 之 如何实现Pixel Streaming

Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻量级设备,同时将用户输入(如鼠标、键盘、触控)回传到服务器处理。UE的插件相对比较好用,但是就是环境下载总是失败。希望这篇文章对你有所帮助。

TxNet 1369

编写一个期货跨期套利的程序,谈谈思路及案例

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1718

Grok Build:面向工程上下文的AI编程CLI工具

在AI编程工具泛滥的今天,'工程上下文'已成为决定智能辅助实效性的核心概念——它远不止项目文件结构,而是涵盖Git状态、本地服务拓扑、CI/CD阶段、环境变量、协作消息等动态多维信息。传统CLI工具因缺乏对上下文的系统化建模与实时感知,常陷入‘懂语法却不懂现场’的困境。Grok Build通过分层context snapshot机制(声明式元数据+运行时探针+协作桥接+意图锚点),实现对真实开发场景的深度理解与可验证响应。其价值不在于生成代码的速度,而在于将AI从‘代码补全器’升维为‘工程协作者’,适用于复

weixin_33860553的博客 466

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Grok Build:声明式任务自动化工具,简化开发运维工作流

任务自动化是现代开发与运维中的核心需求,旨在通过自动化脚本替代重复性手动操作,提升效率并减少人为错误。其原理在于将一系列操作步骤封装为可重复执行的流程,通过条件判断、依赖管理等机制实现复杂逻辑编排。在技术价值上,自动化工具能够统一任务管理、降低脚本语言学习成本,并提升复杂流程的可读性与可维护性。常见的应用场景包括文件批量处理、日志监控、数据转换以及自动化部署等。本文聚焦于Grok Build这一声明式任务自动化工具,它通过简洁的配置语言整合了文件操作与流程控制等热词功能,帮助开发者高效构建跨平台自动化工作流

weixin_33829657的博客 2517

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

构建软件供应链漏洞自动化修复与验证一体化闭环流程

软件供应链安全是现代DevSecOps的核心挑战,其核心原理在于管理由第三方开源组件、依赖库和构建工具引入的潜在风险。传统的漏洞响应模式往往是割裂和手动的,而通过建立自动化闭环流程,可以实现从漏洞感知到修复验证的无缝衔接,显著提升安全左移能力。该流程的技术价值在于将安全能力工程化,通过自动化工具链集成,实现修复策略智能决策、一键修复执行以及多层次效果验证。在应用场景上,它尤其适用于中大型研发团队,能有效应对高频的依赖漏洞威胁。本文以SCA工具和CI/CD流水线为核心,详细阐述了如何构建一个包含情报感知、智能

chouzu8463的博客 329

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

掌握Visual C++ Build Tools:安装、验证与故障排除全攻略

它不仅提供了强大的编译器和链接器,还支持从命令行构建C++库和应用程序,非常适合那些需要自动化构建流程或集成到CI/CD管道中的项目。今天,我们将深入探讨如何正确安装Visual C++ Build Tools,并分享一些实用的小技巧来验证安装是否成功以及解决可能遇到的问题。根据你的需求选择适合的工作负载,特别是“使用C++的桌面开发”选项,这将包括所有必要的编译器、库和其他构建工具。值得注意的是,在安装过程中可以选择性地添加其他组件,如Windows SDK等,以便更好地满足特定项目的需要。

携梦问道的博客 8077
上一篇: 精通 Grails: 用定制 URI 和 codec 优化 Grails 中的 URI
下一篇: 启用 Web 应用程序中的后退导航
phantomhu
博客等级 码龄23年 70粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值