前言:最近我在将自己写的一些组件开源,想要发布到maven中央仓库,结果发现网上很多的教程都已经过时,而官网的教程也有一定程度上的混沌,主要是部分文章已经过时导致的。给我这样的小白选手带来了一些麻烦,在我自己成功发布后决定总结一下整个流程以及中间遇到的问题分享出来。

maven中央仓库的限制

官网地址:https://central.sonatype.org/publish/requirements/

  1. 不允许发布快照;
  2. 必须有javadoc包;
  3. 必须有souce包:也就是你的代码是开源的,这也是为什么一些不开源jar包不选择中央仓库的主要原因,比如itext和aspose等
  4. 至少有.md5.sha校验结果;
  5. 必须要使用GPG或者gpg签名;
  6. 必须有pom.xml文件:同时需要有正确的groupIdartifactIdversionnamedescriptionurllicensesdevelopersscm

那么接下来我会详细讲解一下关于这些条件的。

阅读全文 »

项目中原本的方案中是将word保存了所有的修改并转为pdf做在线预览,但是在转换的过程中丢失了修改记录和批注信息。

❌ 方案一:使用aspose做word转pdf且同时保留修改记录 -收费

我司目前只采购了aspose 20.11版本,基于这个版本简单尝试了一下,缺点如下:

  1. 只能完成删除记录的显示;
  2. 无法声明出操作人和操作时间;
  3. 单页word有概率被转成了两页;

高版本的aspose有可能是支持的,我在官网有找到一份文档,需要的朋友可以去看看: Aspose Words export Comment and Revision author Aspose Words 导出注释和修订作者,但我司没有采购高版本aspose的计划,所以方案一我这里是放弃了。

另外我附上我自己写的demo代码以供大家尝试:

阅读全文 »

2024年12月4日更新:这个方案最终被抛弃了,建议大家直接使用 https://github.com/docker-easyconnect/docker-easyconnect 即可

aTrust是深信服原easyconnect的升级产品,重点打造了一个“零信任”的概念,就是这个概念让我头皮发麻,其在官网直接挂着

终端检测深入:支持进程级检测,可发现和阻止终端上非可信应用进程;在登录时、每一次访问业务时,对终端环境持续进行检测和认证,确保终端合规。

这和病毒有什么差别么?所以我当然不能让这种糟粕运行在我的macOS宿主机上,于是我开始了折腾之旅。

第一步,申请个人免费的vmware

这个申请的方法大家可以在网上搜一下,有很多详细的图文教程,我后面会考虑补充一篇博客,但现在没时间搞。

当然你也可以试试免费的Oracle VM VirtualBox,理论上来说也是一样可用的。

第二步,下载debian 11的镜像文件

我要特别讲一下为什么要下载debian 11,这是因为atrust官方提供的linux安装包特别强调了自己支持的是国产化的uos和麒麟os,但是咱们下载下来以后是一个deb文件,经过我自己测试,将deb包转为rpm包以后,在centos 7/centos 7.5/centos 8上都无法安装。

当然我不排除是我自己操作有问题,大家如果特别喜欢用centos的,可以考虑自己折腾一下。但是centos已经不维护了,在使用过程中会有一些问题。

经过我自己的测试,debian 11是可以使用的。

debian 11的镜像推荐大家用BT种子的方式,实测比直接通过镜像站下载的速度更快,但请不要使用迅雷这类只下载不上传的“吸血”软件。
BT种子官网下载地址:debian-11.6.0-amd64-DVD-1.iso 其他版本的镜像大家可以自行在官网查找

补充信息:BT下载软件推荐qbittorrent,请在下载成功以后保持至少24小时运行时间以供其他人从您本地获取文件。如果您有NAS服务器那就更好
请不要使用迅雷这类只下载不上传的“吸血”软件

第三步,使用vmware引导安装debian 11

这里我就不写具体的操作步骤了,请注意:

  1. 虚拟机网络要选择桥接(这非常重要)
  2. 你需要安装桌面才能打开atrust登录你的账号
  3. 语言选择的时候直接选择中文,否则时区在启动后修改比较麻烦,很可能导致无法使用apt-get update更新

可能会遇到的问题

无法执行apt-get update或者是速度较慢

可以改用镜像源,修改/etc/apt/sources.list文件的内容,这里用aliyun举例:

1
2
3
4
5
6
7
8
deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

然后再执行apt-get update即可

如果你一直遇到更新失败,你可以按照这个检查顺序:

  1. ping mirrors.aliyun.com 看看能否ping通网络
  2. 检查 ping mirrors.aliyun.com 返回的IP是否是宿主机可以ping通的IP,以此确认是不是dns解析存在问题。存在问题可以通过修改debian 11上的/etc/hosts文件来解决
  3. 检查时区/时间是否正确

第四步,在debian 11中安装atrust

atrust下载客户端时,选择amd 64 麒麟Kylin即可,官网似乎没有找到下载介绍页,这个地址应该是有各个团队/企业的VPN登录页提供的

下载完的deb安装包,可以通过scp命令直接传输到debian中,当然也可以使用一些sftp客户端

安装deb时,需要带上相关的依赖,你可以执行

1
sudo apt-get -f install atrust.deb

debian 11默认安装过程中没有开启root账号的ssh远程登录配置,你得去把这个打开。可参考:debian 开启root账号远程ssh登录
或者你直接在虚拟机页面中执行

第五步,debian开启路由转发

通过修改/etc/sysctl.conf文件中的net.ipv4.ip_forward的值改为1,并执行sysctl -p使得配置生效即可
再把debian的防火墙关闭即可

第六步,macOS宿主机修改路由a

1
sudo route add 1.0.0.0/8 【这里写上debian虚拟机的IP地址】

这样就可以了

1.0.0.0/8这个是我随便写的,如果你们用的是192,或者172的开头的IP地址,那么就是192.0.0.0/8或者172.0.0.0/8
当然如果你本地的IP地址就是192开头的,那么你可能需要拆得更细致一点。假设你本地的IP地址是192.168.1.100,你的内网地址是192.168.31开头,那么你的shell脚本就应该是

1
sudo route add 192.168.32.0/24 【这里写上debian虚拟机的IP地址】

这个地方需要你对网络有一定的了解,添加成功以后可以使用telent命令确认一下是否能通特定的端口

此外你还需要注意两点:

  1. 这个debian虚拟机用的是桥接模式,所以每次连接新的路由器可能会拿到不同的IP,这时候你需要删掉之前的路由,然后加上新的路由
    1
    sudo route delete 1.0/8
  2. 对于内部使用域名访问的服务,则需要修改macOS宿主机的hosts文件,或者你本地自建一个dns服务来处理

这样做了以后,不管你是ping还是 telnet 还是 curl 或者是socket连接都可以无感体验,debian 11推荐1c1g的配置即可,肯定会比你直接在macOS宿主机上登录atrust会耗电一些。如果有条件的话,也可以把debian 11部署到其他的电脑上。

其他你可能需要了解的

macOS宿主机更换网络以后如何处理?

我尝试过单独重启网络

1
sudo systemctl restart networking

但实际没有效果,具体原因我暂时也没时间去搞了,我目前是通过重启debian 11来解决的

1
sudo systemctl reboot -i

为什么不使用docker而选择虚拟机?

macOS上的docker本质上也是一个运行在虚拟机中的,并且docker在官网已经明确说明macOS上的docker服务无法实现从宿主机到docker容器的通信

GitHub上也有相关的解决方案(docker-connector),如果你感兴趣的话,你可以动手尝试一下。docker安装debian 11以后,安装一个vnc server即可解决atrust客户端登录的问题,其他操作应该和我这篇博客的方法相差不大

Jetcache踩坑合集

写在前面

本文主要是记录个人在使用jetcache时遇到的一些问题以及相应的解决方案,次之是将这些问题和解决方案发布到互联网中希望能帮助到一些人,如果觉得文章写得还不错,可以点赞收藏以鼓励我继续更新博客,这将对我非常重要。

流水账子标题中重复带上jetcache关键字主要是为了提高搜索的准确性,本身文章上下文已足够表达含义,但是为了优化搜索情况特意加上的。

踩坑流水账

jetcache默认返回值为null时候,不会缓存

这个是jetcache的默认策略,我之所以遇到这个问题是我自己写的测试代码时直接返回了null,我误认为是我spring aop配置有问题,导致缓存没有生效,实则是jetcache默认策略。

com.alicp.jetcache.anno.Cached注解中有一个属性cacheNullValue,默认值为false,表示不缓存空值。

jetcache不支持模糊清空缓存

这点其实在GitHub issue清单中有好几个issue 都是与这个问题相关的,如果你也是从Spring Cache转到jetcache,由于缺少模糊清空缓存,会导致整个系统原有的实现都必须调整。

这个特性主要影响到缓存的数据是一个列表或者是一整颗树的情况,当列表或树中部分值更新以后,这个列表的缓存或树的缓存没有办法更新。

jetcache多节点缓存清空需要先有@Cached注册

阅读全文 »

2024年7月5日更新:

  1. 原帖在这里:https://baofeidyz.hashnode.dev/apple-music
  2. 调整部分过时的内容,新增了iCloud云盘链接(阿里云盘不让分享apk文件,所以先暂时拿iCloud云盘用一下)

2023年10月12日更新:
很抱歉,就目前来看苹果已经在逐步收紧了,如果还没上车的朋友请尽快上车了,后期可能注册和订阅都将变的越来越困难,详细操作步骤我已经单独更新了一篇博客,请务必查看!链接:《新注册土耳其Apple ID订阅Apple Music详细操作步骤,新手一定要看!》

2023年7月23日更新:
很抱歉,就我今天测试结果来看,至少从今天(也许很早之前)苹果已经改为免费一个月了,博客原标题中的“-免费六个月”部分已修改为“每月最低不到2元”(目前家庭订阅是29.99里拉,约等于8元,家庭订阅最多可以六人,平均算下来人均不到1.4元)。此外,部分平台由于文章无法再编辑,已尽量通过评论区的方式告知,希望您理解。

阅读全文 »

解决macOS IntelliJ IDEA 卡顿问题

写在前面的话1:我在撰写这篇博客时候,所用的IntelliJ IDEA版本是IntelliJ IDEA 2022.3.3 (Ultimate Edition),你需要知道可能对于不同的IntelliJ IDEA版本会有一定的差异

写在前面的话2:如果我这篇博客可以帮助到你,请给我一个免费的赞和收藏,谢谢

问题描述

我遇到的卡顿问题主要体现在编辑代码时,输入中文时,cpu使用率飙升到100%,并且中文已经在键盘中打完了,但是展示到IntelliJ IDEA页面上还需要5秒以上,已经卡到没办法做研发工作了。

一些相关的因素

在特别卡的时候,我有更换过一次项目。我在做这个项目之前,虽然也卡,但是不会类似于这个项目这么卡。
但同时我在这期间有升级过macOS的系统版本和IntelliJ IDEA的版本,变量因素很多,加大了问题排查定位的难度。

排查思路

我以前很喜欢写流水账,但是这次来来回回花了我好几个月才解决,所以我已经回忆不起来我到底是怎么一步一步排查的了,我尝试写一些我还能想起来的作为排查思路

检查内存、硬盘、cpu使用率

这是我最开始的考虑,macOS上有一个系统应用,叫“活动监视器“,这里面可以比较清晰的看到IntelliJ IDEA的cpu、内存、硬盘、网络的使用情况,当然你也可以在终端中使用top或者htop来确认。
通过我的观察,我发现我输入中文的时候,我的八个很容易就达到了100%,CPU使用率轻轻松松超过400%

如果你使用IntelliJ IDEA开发程序,那么Java应用的卡顿问题如何处理,你应该是比较熟悉的,对吧?但是如果没有源码,我们直接去查IntelliJ IDEA的线程信息其实帮助也不是很大,我稍微花了一点时间在网络上翻找了一些帖子。

IntelliJ IDEA其实是有自己的分析工具,其位置在于【顶栏->Help->Diagnostic Tools->Activity Monitor】

说个题外话,不建议安装IntelliJ IDEA的中文语言包,因为互联网上大量文档主要还是用英文来写的,我在解决这个IntelliJ IDEA卡顿问题的时候也在IntelliJ IDEA自己的论坛看了很多帖子,如果你长期使用中文语言包,对于一些词汇太陌生会导致自己处理问题比较麻烦。

从这个工具里面咱们就可以看到具体什么进程导致CPU的高占用,对于进程名不熟悉的,借助于Google也可以很快了解具体是做什么的。

不同的使用场景下,会存在不同的原因,并且因为IntelliJ IDEA还支持了插件,所以导致卡顿的原因更是不计其数,但只要你懂得如何去排查问题,这个事儿就变得没有那么困难了。

一个一个的禁用插件来排查

这个方法是很多人都有提到的,并且在实际应用上是真的有效果!如果你安装的插件比较多,那么请一个一个的disable掉,利用排查法找到具体是哪个插件所导致的,插件越多理论上时间会比较长,你也可以选择以五个为单位快速定位一个大致的范围。

常见的一些解决方案

修改IntelliJ IDEA的内存

放到第一位肯定是相当重要的,但IntelliJ IDEA在扫描、编译、处理各类问题的时候,确实是需要很大内存的。我个人目前是给到了6G。

网上有各种各样教你修改配置文件的方法,但是IntelliJ IDEA自己就提供了这样的功能,你直接需要点击【顶栏->Help->Edit Custom VM Options】就可以在IntelliJ IDEA编辑框打开一个以.vmoptions结尾的文件。如果之前已经有-Xmx属性那么就改一下,如果没有就新起一行加上即可,如果你想和我一样配置成6G,那么修改属性值应该是-Xmx6144m即可,这表示最小堆内存位6G

使用更高版本的jdk以及IntelliJ IDEA的新界面

java 原来使用的是OpenGL,但是macOS从Mojave开始启用了新的Metal框架,jetbrains对此也是早早布局,我这里放两个链接供你了解更多的内容:

  1. Metal for IntelliJ Platform | The JetBrains Platform Blog
  2. https://youtrack.jetbrains.com/issue/JBR-745/Improve-java2d-rendering-performance-on-macOS-by-using-Metal-framework

当你的分辨率非常高,或者是显示器非常的多时,渲染的压力就会越大,cpu就会飙升,IntelliJ IDEA也会变卡。截止目前IntelliJ IDEA已经发布了New UI,虽然被标记为Beta,但从我个人使用情况来说,我还没遇到过问题。反而新版本的UI更让我聚焦我的开发工作,用了几天很快就适应了。
简单来说,你需要jre 17及以上版本且IntelliJ IDEA版本保持为最新版即可。

插件导致的卡顿

git插件

排查思路很简单,就是我在上一个章节中提到的一个一个的禁用插件来排查,如果你已经确定是IntelliJ IDEA的git插件导致的卡顿,但是你又想像我一样继续使用这个git插件,那么应该怎么解决呢?

这个问题我是偶然一次浏览到的,macOS 下 Intellij IDEA 变得特别卡该如何解决? - 知乎 其中第一个高赞回答就是解决方法,其实就是.gitignore文件设置不合理,导致git插件索引了大量无意义的文件,我目前维护的这个项目git下同时存放了多个子系统的代码,文件数量和层级都非常的夸张。

我在我本地修改了.gitignore文件的内容,去掉了一些我不需要管的文件夹后,git插件导致的IntelliJ IDEA卡顿问题就迎刃而解了。

其他插件

  • 如果你确定你不需要,比如alibaba的p3c检查,或者是一些其他的检查扫描类插件,可以disable的都尽量卸载即可。
  • 对于一些比较小众的插件,你可以尝试通过GitHub直接联系作者以寻求解决方案。

mat用小内存解析超大堆快照的可行方法

写在前面的话1:服务器上的堆大小已经远超过我开发机的内存大小了,如果直接使用mat客户端来分析很快就会出现OOM的问题,这篇博客一定程度上可以解决这个问题

写在前面的话2:大部分同学一直都在使用mat的gui来做分析,但其实mat的gui只是增加来一个html预览功能,我们可以利用mat命令直接生成html,甚至我们还可以挂载成在线服务,以供其他人浏览,非常赞

命令

1
2
3
/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:suspects
/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:overview
/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:top_components
阅读全文 »

与此同时,这还是一份我个人重装macOS系统的备忘录😁

工具类

软件名称 软件用途 价格 推荐下载方式
homebrew macOS包管理工具 免费 终端执行:/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
mos 用于鼠标切换上下滚动的顺序,以及鼠标平滑滚动 免费 brew install mos
AppCleaner 卸载app,并且删掉相关联的文件 免费 brew install appcleaner
numbers 替代Excel 免费 app store
keynote 替代PowerPoint 免费 app store
pages 替代word 免费 app store
chrome浏览器 上网、开发调试 免费 https://google.cn/chrome
sinology drive client 群晖文件同步工具 免费 Synology Drive
snipaste 截图、贴图工具 基本版免费(高级版macOS还没上) brew install snipaste
mircsoft remote windows操作系统远程桌面工具 免费 美区app store
infuse 一个跨iOS iPadOS macOS tvos,带资源刮削的播放器 x刀/年 美区app store
Obisidian markdown笔记软件 免费(同步服务收费) brew install Obisidian
marktext markdown编辑软件,操作表格的时候会比Obisidian好用很多很多,可以搭配使用 免费 brew install mark-text
ForkLift ftp、sftp软件 收费,买断制 brew install –cask forklift
Maccy 剪贴板记录软件 免费 brew install maccy
MonitorContror 显示器亮度控制软件 免费 brew install –cask monitorcontrol
Itsycal 菜单栏中的日期选起控件 免费 brew install Itsycal
omnidisksweeper 磁盘清理工具 免费 brew install –cask omnidisksweeper
vmware-fusion vmware虚拟机免费版 个人免费(需要自己在官网申请license) brew install –cask vmware-fusion

通讯软件

软件名称 软件用途 价格 推荐安装方式
telegram 聊天 免费(高级会员需订阅) app store(有沙盒机制)
foxmail 管理企业邮件 免费 brew install –cask foxmail

编程软件

软件名称 软件用途 价格 推荐安装方式
drawio UML绘图工具 免费 brew install drawio
vscode 文本编译器(也可以是IDE) 免费 brew install –cask visual-studio-code
docker 容器化工具 免费 brew install –cask docker
nginx web、代理服务等 免费 brew install nginx
mat java堆内存分析工具 免费 brew install mat
jmeter 并发测试工具 免费 brew install jmeter
node 开发环境 免费 brew install node
git 代码分支管理工具 免费 brew install git
sdkman 各类SDK管理工具 免费 curl -s “https://get.sdkman.io
0%