You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Jira插件能否复用源码?Spring Boot适配方案咨询

问题

我有两款功能、API近乎一致但UI不同的产品,为避免代码重复,希望复用同一套Java Spring Boot代码开发两款Jira插件。当前使用atlassian-connect-spring-boot-starter和atlassian-connect-spring-boot-jpa-starter,现有插件配置如下:

{
  "key": "${addon.app1-key}",
  "baseUrl": "${addon.app1-base-url}",
  "name": "app1",
  "authentication": {
    "type": "jwt"
  },
  "lifecycle": {
    "installed": "/installed",
    "uninstalled": "/uninstalled"
  },
  "modules": {
    "generalPages": [
      {
        "key": "landing-page",
        "location": "system.top.navigation.bar",
        "name": {
          "value": "app1"
        },
        "url": "/collaboratorlogin",
        "conditions": [
          {
            "and": [
              {
                "condition": "user_is_admin",
                "invert": true
              }
            ]
          },
          {
            "condition": "user_is_logged_in"
          }
        ]
      },
      {
        "key": "admin-page",
        "location": "system.top.navigation.bar",
        "name": {
          "value": "Manage app1"
        },
        "url": "/adminpage",
        "conditions": [
          {
            "condition": "user_is_admin"
          }
        ]
      }
    ],
    "postInstallPage": {
      "url": "/home",
      "name": {
        "value": "Home Page",
        "i18n": "homepage.name"
      },
      "key": "home-page"
    },
    "webhooks": [
      {
        "event": "jira:issue_created",
        "url": "/wh/issue_created"
      },
      {
        "event": "jira:issue_updated",
        "url": "/wh/issue_updated"
      }
    ]
  },
  "scopes": [
    "READ",
    "ADMIN",
    "WRITE",
    "ACT_AS_USER"
  ]
}

我希望新增一款类似的Jira插件,但atlassian-connect-starter对此存在限制,请问是否可以定制该starter以实现源码复用?

解决方案

完全可以通过定制atlassian-connect-spring-boot-starter或基于现有能力扩展来实现源码复用,以下是具体方案:

1. 无需定制starter:多环境配置+动态manifest加载

这是最轻量化的方案,不用修改starter源码:

  • 为两款插件分别创建环境配置文件,比如application-app1.properties和application-app2.properties,在其中定义各自的插件key、baseUrl、UI相关配置项(如页面名称、前端资源路径)
  • 修改atlassian-connect.json模板,将所有差异化配置替换为占位符,比如${addon.app-name}、${addon.ui-resource-path}
  • 启动时通过spring.profiles.active指定对应环境,Spring Boot会自动加载对应配置,渲染出不同的插件manifest
  • UI层面通过配置的资源路径加载不同的前端静态文件,后端业务逻辑完全复用

2. 定制starter:扩展配置类与manifest生成逻辑

如果需要更灵活的控制,可以修改starter的核心逻辑:

  • 扩展AtlassianConnectProperties类,新增多插件支持的配置属性,比如一个包含多个插件配置的列表
  • 重写AtlassianConnectManifestProvider类,根据当前激活的标识(比如请求头、环境变量)动态生成对应插件的manifest
  • 在starter中添加profile感知逻辑,自动识别当前要启动的插件实例,加载对应配置

3. 代码复用的额外优化

  • 将业务逻辑、API接口、JPA实体等核心代码抽离到独立的模块(比如一个common jar),两款插件的工程都依赖该模块
  • UI部分通过不同的前端打包产物,放在不同的资源目录,后端根据配置动态返回对应UI资源
  • 生命周期接口(installed/uninstalled)、webhook逻辑可以复用,仅在需要差异化处理的地方通过配置判断分支

内容的提问来源于stack exchange,提问作者Karthik BS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:30:23