# pomver **Repository Path**: hyzlim/pomver ## Basic Information - **Project Name**: pomver - **Description**: pom版本号自动获取更新软件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-04-10 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Pomver > maven 版本管理工具,用于解决多分支开发时的版本号冲突。 本项目是 IntelliJ IDEA 插件,由早期的 Java 版插件(`G:/workSpace/pomver`)迁移而来, 现使用 **Kotlin 2.3 + IntelliJ Platform Gradle Plugin 2.x** 构建,目标平台为 IntelliJ IDEA 2025.3。 ## 功能 在 `Tools | pomver`(快捷键 `Alt + P`)打开版本管理弹窗: 1. **自动获取 maven 仓库地址**——优先读取项目 `.idea/jarRepositories.xml`,其次读取 maven `settings.xml` 的镜像地址,并把本次使用的地址记入 `.idea/workspace.xml` 供下次使用。地址可手动修改。 2. **自动读取项目名称**——取项目根目录 `pom.xml` 中项目自身的 `artifactId`(不会误取 `` 或依赖的)。 3. **查询最新版本号**——调用 Nexus 的 Ext.Direct 接口,分别查出最新的 release 与 snapshot 版本。 4. **计算推荐版本号**——基于最新版本,给出主版本、次版本、修正版本三个位分别递增后的推荐值。 5. **写回版本号**——点击「应用」把推荐版本号写入 `pom.xml` 的 ``。 https 仓库默认跳过 TLS 校验,以兼容内网 Nexus 常见的自签名证书(请求会记录日志)。 ## 与 Java 版的差异 | 项目 | Java 版 | 本项目 | |------|---------|--------| | 语言 / 构建 | Java + IDEA 原生工程 | Kotlin + IntelliJ Platform Gradle Plugin 2.x | | XML 解析 | dom4j | 平台自带 JDOM(已禁用 DTD / 外部实体) | | JSON 解析 | fastjson | 平台自带 Gson | | HTTP | Apache HttpClient | JDK `HttpURLConnection`(同样遵循 JVM 代理设置) | | 界面布局 | swingx `VerticalLayout` | `GridBagLayout` + IntelliJ 组件 | | 状态传递 | 静态全局变量 `CommonData` | 按项目传递,多窗口互不干扰 | | 查询线程 | EDT(阻塞界面) | 后台任务 + 进度条 | 迁移过程中修复的问题: - 原 `getUrlByJarRepositories()` 判空条件写反,导致读取到的仓库地址被丢弃; 同时选择器首段只匹配子节点,`jarRepositories.xml` 这类「根节点即目标组件」的文件永远查不到数据。 - 快照版本号不含 `-` 时 `substring(0, indexOf("-"))` 会抛 `StringIndexOutOfBoundsException`。 - 版本号含非数字段(如 `1.0.0.RELEASE`)时比较逻辑会抛 `NumberFormatException`。 - 写入 `pom.xml` 时原实现用 dom4j 整体重写文件,会重排版;现只替换 `` 标签文本, 注释、缩进、属性顺序完全保留,git diff 只有一行。 - 通知使用了已从平台移除的 `new NotificationGroup(...)` API。 ## 项目结构 ``` src/main/kotlin/com/btjava/pomver ├── action/PomverAction.kt # Tools | pomver 菜单入口 ├── ui/PomverDialog.kt # 版本管理弹窗 ├── nexus/NexusVersionClient.kt # Nexus Ext.Direct 版本查询 ├── maven/MavenHandlers.kt # settings.xml / workspace.xml / jarRepositories.xml 解析 ├── pom/PomHandler.kt # pom.xml 读取与版本号写入 ├── version/VersionCalculator.kt # 版本号计算与比较 ├── util/ # XML、HTTP、通知、时间戳工具 └── i18n/PomverBundle.kt # 文案资源 ``` 文案位于 `src/main/resources/messages/PomverBundle.properties`,插件声明位于 `src/main/resources/META-INF/plugin.xml`。 ## 开发与构建 ```bash ./gradlew build # 编译 + 测试 ./gradlew test # 仅运行单元测试 ./gradlew runIde # 启动带插件的沙箱 IDE ./gradlew buildPlugin # 打成 zip,输出到 build/distributions ./gradlew verifyPlugin # 校验插件描述 ``` 依赖的 IDE 版本在 `build.gradle.kts` 的 `intellijPlatform { intellijIdea("2025.3.6.1") }` 中指定。 构建需要 JDK 21(若本机默认 JDK 较低,可设置 `JAVA_HOME` 或让 Gradle toolchain 自动下载)。 `.run/` 目录下提供了 Run IDE with Plugin、Run Tests、Run Verifications 三个运行配置。 ## 单元测试 `src/test/kotlin` 下覆盖了不依赖 IDE 的纯逻辑: - `VersionCalculatorTest` —— 推荐版本号计算、版本号比较; - `XmlQueryTest` —— 选择器路径、只匹配直接子节点、DTD/外部实体防护; - `PomHandlerTest` —— 版本号替换(含 `` 版本、自闭合标签、版本继承等情况)。 ## 相关链接 - 原项目与说明:https://gitee.com/hyzlim/pomver - [IntelliJ Platform SDK 文档](https://plugins.jetbrains.com/docs/intellij) - [IntelliJ Platform Gradle Plugin](https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html)