使用VSCode解决fork项目的同步冲突

在Github上Fork了一个iptv-api的项目,设置自动获取信息的Action实现了对IPTV源的每日更新,但有时上游仓库会对项目功能作更新或修复,这时就需要将Fork仓库与上游仓库同步,此时就可能出现冲突 Github无法在线解决冲突,这里使用VSCode解决 首先打开VScode,进入Fork项目的目录中,确保VScode已识别本地仓库且已添加上游仓库,然后新建终端执行: git fetch upstream 接着输入git branch确保正在需要同步的分支上,在本例中,只存在一个分支master;如果存在多个分支,则使用git checkout <branch>切换即可 执行合并: git merge upstream/master 执行后,VSCode左侧导航栏就会提示存在冲突的文件,可以鼠标点击选择是否保留先前内容,选择完成后保存、提交并同步即可,流程与正常使用VSCode执行Git操作一致

August 15, 2025

将Java项目打包为可执行文件

本实例的Java工程构建了一个简单的服务器,监听本地的12345端口,当接收到GET请求:/get_cpuid时,返回当前运行终端的CPUID信息 整个流程分为两部分: 工程打包为jar文件 jar文件转换为exe安装程序,安装后得到exe可执行程序 在打包为jar之前需要指定主类,Maven设置: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.example.LocalHardwareService</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> 执行mvn package后会打包为一个fat jar,文件名GetDeviceInfo-1.0-SNAPSHOT-shaded.jar 警告 若不使用fat jar,则安装的exe会提示启动JVM失败 执行以下jpackage命令: jpackage --input target/ --name LocalHWService --main-jar GetDeviceInfo-1.0-SNAPSHOT-shaded.jar --main-class org.example.LocalHardwareService --type exe --vendor "FICN" --description "Local Hardware Info Service" input:输入目录。因为jar文件是被打包存储于项目的/target目录中的; main-jar:jar文件名; main-class:主类名; vendor:发行公司名; description:文件描述,会显示在任务管理器中 说明 一般来说,vendor和description属性是无需特别指定的,但由于执行这jpackage指令会使用WiX,而我所安装的WiX(v3.14.1)的这两个属性默认会使用非ASCII字符,这就导致了jpackage命令报错,所以需要手动指定这两个属性,保证是纯英文 命令完成后在当前目录生成LocalHWService-1.0.exe文件,这个文件并不能直接运行服务,而是一个安装程序 双击打开后自动安装,一般会安装到C:\Program Files中,进入子目录\LocalHWService后,可以看到文件: LocalHWService.exe就是服务文件了,双击运行,打开任务管理器可以看到其在后台正常运行: 在浏览器中进行测试,此时请求正常得到响应:

August 5, 2025

Keycloak安装自定义插件及代码解析

参考官方开发示例,使用Java为Keycloak系统编写一套个人隐私问题的认证模块 代码编写完成后,借助Maven将项目打包为jar文件,传输至集群主节点准备部署 注意在打包时需要添加resources/META-INF/services目录,并注册Factory类 导入插件 首先创建初始ConfigMap: kubectl create configmap secret-question-plugin --from-file=SecretQuestion.jar=./kc-plugins/SecretQuestion.jar -n keycloak 然后执行kubectl edit statefulset keycloak -n keycloak对keycloak的StatefulSet进行修改: spec: template: spec: volumes: - name: plugins-volume configMap: name: secret-question-plugin containers: - name: keycloak # 其他配置... volumeMounts: - name: plugins-volume mountPath: /opt/keycloak/providers/SecretQuestion.jar subPath: SecretQuestion.jar 更新插件 之后每次更新迭代插件时,需要先删除原ConfigMap,然后创建新ConfigMap,最后重启Pod即可 # 删除旧的ConfigMap kubectl delete configmap secret-question-plugin -n keycloak # 创建新的ConfigMap kubectl create configmap secret-question-plugin --from-file=SecretQuestion.jar=./kc-plugins/SecretQuestion.jar -n keycloak # 重启Keycloak Pod kubectl delete pod keycloak-0 -n keycloak 插件代码解析 将插件导入Keycloak系统后,需要先在【身份验证】【必需的操作】处将之开启,然后将自定义的认证执行器插入流程之中,如此才能使新认证功能发挥作用 这里将新认证器放置在“账户密码验证”之后且作为必需行动 当用户首先进入认证界面(账户密码界面)时,仅账户密码认证执行器在发挥作用 ...

July 13, 2025

数论复习

第一章 整除、公因数公倍数 若$a\mid b$,则$\exist c$,使得$b=ac$ 若$p\mid ab$,则$p\mid a$或$p \mid b$ 若$a \mid mb$且$(a,b)=1$,则$a \mid m$ (单边消去) $am \mid bm ,\space m \ne 0\Leftrightarrow a \mid b$ (双边消去) $[a,b](a,b)=ab$ $d =(a,b)$,则$(\frac ad,\frac bd)=1$ a,b的最大公因数可以用辗转相除法求,例如$(78,108)=(78,30)=(18,30)=(18,12)=(6,12)=6$ 第二章 同余关系 $a\equiv b\mod m \Leftrightarrow m \mid a-b$ (证明mx+mx通过mm的完系时常用) 对于同余式组: $$ \begin{cases} a\equiv b\mod m\\ \alpha \equiv \beta \mod m \end{cases} $$有$a+\alpha \equiv b+\beta \mod m$;$a\cdot\alpha \equiv b \cdot\beta \mod m$;$f(a) \equiv f(b)\mod m$ 威尔逊定理:$(p-1)!+1 \equiv 0\mod p$ ...

June 25, 2025

信息汇总(持续更新)

这里保存一些个人正在使用的或是好用的工具、源地址 好用、可用的Docker国内镜像源 渡渡鸟 毫秒镜像 IPTV直播源(个人) https://github.moeyy.xyz/https://raw.githubusercontent.com/FnICeN/iptv-api/refs/heads/master/output/user_result.txt MusicFree插件订阅 https://musicfreepluginshub.2020818.xyz/plugins.json 计划未来自行部署到Github,原仓库地址:https://github.com/xxnuo/MusicFreePluginsHub 阅读APP书源 https://legado.aoaostar.com/sources/b778fe6b.json 原仓库地址:https://github.com/aoaostar/legado?tab=readme-ov-file

June 11, 2025