mvnd结合idea使用
前言
2021年看到apache新出了mvnd这么一个项目,属于maven的子项目,但是介绍是maven加强版,超过maven和gradle的速度,是maven的2~10倍,当时体验了下,还不错,但是一直没法配合idea使用,所以暂时搁置没记录下来。2024年升级了下idea,最近无意发现可以配置mvnd命令并且结合插件maven helper无缝使用,编译和打包速度确实快,而且跟原始maven使用体验一样。
……一位Java开发者,喜欢研究技术,同时也在学习Golang和Python中,对服务器、Linux使用比较熟悉。欢迎添加技术交流QQ群:655158296
2021年看到apache新出了mvnd这么一个项目,属于maven的子项目,但是介绍是maven加强版,超过maven和gradle的速度,是maven的2~10倍,当时体验了下,还不错,但是一直没法配合idea使用,所以暂时搁置没记录下来。2024年升级了下idea,最近无意发现可以配置mvnd命令并且结合插件maven helper无缝使用,编译和打包速度确实快,而且跟原始maven使用体验一样。
……Thymeleaf 是 Spring 官方文档里默认的模板引擎,最大的卖点是原生 HTML 模板:模板文件不经过引擎也能直接用浏览器打开看排版,设计稿改改就能当模板用。FreeMarker 那套见 接入指南 和 语法详解,这篇给 Thymeleaf 同样的一套。
|
|
模板默认放 classpath:/templates/,后缀 .html。
FTL 模板语法在 FreeMarker常用语法与指令详解里整理过了,这篇解决另一半问题:怎么把 FreeMarker 接进 SpringBoot。依赖、配置、渲染、全局变量,配一套能直接跑的样例。
|
|
starter 会自动带上 freemarker 核心包和 FreeMarkerAutoConfiguration,不加任何配置就能跑。
src/main/java
└── com.example.demo
├── DemoApplication.java
└── controller/PageController.java
src/main/resources
├── application.yml
├── static/ # 静态资源(css/js)
└── templates/ # 模板默认目录(classpath:/templates/)
├── index.ftl
├── user/
│ └── detail.ftl
└── common/
├── header.ftl
└── footer.ftl
约定就三条:模板放 classpath:/templates/,后缀 .ftl,Controller 返回视图名不带后缀。
FreeMarker 在老项目和邮件模板、报表模板场景里依然大量存在。FTL 语法细节多、容易忘,这篇按「输出 → 运算 → 流程控制 → 集合 → 指令 → 宏」的顺序整理成速查笔记。
基本原则:所有标签必须闭合,否则 FreeMarker 无法解析。注释格式
<#-- 注释内容 -->,不会输出。
${emp.name?if_exists} <#-- 变量存在输出,否则不输出 -->
${emp.name!} <#-- 同上 -->
${emp.name?default("xxx")} <#-- 变量不存在,取默认值xxx -->
${emp.name!"xxx"} <#-- 同上 -->
常用内建函数:
……大模型一年之内名词井喷:预训练、SFT、RAG、多模态、Agent……每个词都认识,连起来就看不懂。这篇用一个人话版的比喻把它们串起来——把大模型当成一个打工人,你会发现所有概念都顺理成章。
大模型:一个替代人来打工的打工人。知识工作者他基本都能替代——设计师、客服、文员,顶多缺点创意;体力活也能干,但需要一副好身体(机器人硬件)。
……因项目需要,整理下mysql迁移postgresql的常用工具搜集
开发的pgloader是一个mysql迁移到pg的工具,性能和表现都良好,开发和测试环境迁移已经验正,github地址: https://github.com/dimitri/pgloader
|
|
执行迁移,观察日志没有报错正常结束即可
……手上一批老服务还跑在 JDK 8 上,Oracle 的免费更新早就停了,趁着最近有空把几个服务迁到 21 试了试,过程不算复杂,但坑主要在两个地方:老参数会直接启动失败,还有依赖库的字节码兼容。把迁移过程和注意事项记录下,方便后来者。
站内 tomcat-jvm 那篇有 JDK21 的参数对照,oom 那篇有 OOM 新旧形态对照,这篇侧重怎么迁。
……Python 里到处都是双下划线:__name__、__init__、__all__、__getattr__……刚学的时候只知道 if __name__ == '__main__' 这么抄,不清楚背后的整套设计。这篇把双下划线家族(俗称 dunder,double underscore 的缩写)按用途全面整理一遍,每个都带小样例,有版本要求的标明版本。
先给个总原则(PEP 8 的原话):__xxx__ 这种前后双下划线的命名权属于 Python 解释器,自己写类不要发明这种名字,想表达内部属性用单下划线 _foo 或者双下划线前缀 __foo(后面讲它的改写机制)。
6月16日晚,一位朋友咨询说私有云机房服务器有占用cpu比较高的进程无法kill,我通过向日葵远程跳板机分析了下,发现一些不同于以往挖矿病毒有趣的现象,总结下
初步筛查,发现crontab、top如其他挖矿病毒差不多
初步看进程名kthreaddk,这个挖矿的进程名挺像内核进程kthreadd,但是系统内核进程不太可能cpu占用异常,就继续往下检查
查看crontab,发现异常,结果多次执行,发现路径会变……,总结下规律,发现一直在/dev/cpu/、/dev/mapper/、/dev/disk/、/dev/一直出现在这几层跳跃
单人项目里 git 怎么提交都行,团队协作时就需要约定:commit 怎么写、分支怎么建、一台机器上公司账号和个人账号怎么共存。这篇把这几件事一次说清。
commit 一共由五部分组成:
(1)type:提交类型
feat: 新功能fix: 修复问题docs: 修改文档style: 修改代码格式,不影响代码逻辑refactor: 重构代码,理论上不影响现有功能perf: 提升性能test: 增加修改测试用例chore: 修改工具相关(包括但不限于文档、代码生成等)deps: 升级依赖(2)scope:修改文件的范围(包括但不限于 doc、middleware、core、config、plugin)。
……