Gymterview
middle

Что такое Atlassian SDK и как создать плагин?

Atlassian SDK — набор инструментов для разработки плагинов (P2) для продуктов Atlassian, включая Jira Data Center, основанный на Maven и предоставляющий архетипы, команды сборки и локальное окружение для разработки.

Создание проекта

Пример
# Создание нового плагина из архетипа
atlas-create-jira-plugin
# Интерактивно: groupId, artifactId, version, package

# Структура созданного проекта:
my-jira-plugin/
├── pom.xml                          # Maven POM с Atlassian-зависимостями
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/plugin/  # Java-код плагина
│   │   └── resources/
│   │       ├── atlassian-plugin.xml # Дескриптор плагина
│   │       ├── css/
│   │       ├── js/
│   │       └── templates/           # Velocity-шаблоны
│   └── test/
│       ├── java/                    # Юнит-тесты
│       └── resources/
└── LICENSE

Ключевые команды SDK

Пример
atlas-run            # Запуск Jira с плагином (полная сборка + развёртывание)
atlas-debug          # Запуск с remote debug на порту 5005
atlas-package        # Сборка JAR/OBR для деплоя
atlas-mvn clean install  # Maven-сборка через обёртку SDK
atlas-unit-test      # Запуск юнит-тестов
atlas-integration-test   # Запуск интеграционных тестов

pom.xml (ключевые части)

Конфигурация Maven
<project>
    <parent>
        <groupId>com.atlassian.pom</groupId>
        <artifactId>public-pom</artifactId>
        <version>6.0.3</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.atlassian.jira</groupId>
            <artifactId>jira-api</artifactId>
            <version>${jira.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugin</groupId>
            <artifactId>atlassian-spring-scanner-annotation</artifactId>
            <version>${spring.scanner.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>jira-maven-plugin</artifactId>
                <version>${amps.version}</version>
                <configuration>
                    <productVersion>${jira.version}</productVersion>
                    <productDataVersion>${jira.version}</productDataVersion>
                    <enableQuickReload>true</enableQuickReload>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

OSGi основы

P2-плагины — это OSGi-бандлы. Каждый плагин работает в своём загрузчике классов (ClassLoader), изолированно от других плагинов.

Пример
┌─────────────────────────────────────────┐
│             Jira Application            │
│  ┌───────────┐  ┌───────────┐          │
│  │ Plugin A  │  │ Plugin B  │          │
│  │ (Bundle)  │  │ (Bundle)  │          │
│  │ Import:   │  │ Export:   │          │
│  │  pkg.b    │  │  pkg.b    │          │
│  └───────────┘  └───────────┘          │
│  OSGi Framework (Felix)                 │
└─────────────────────────────────────────┘
  • Import-Package: пакеты, которые плагин использует из хоста или других плагинов
  • Export-Package: пакеты, которые плагин предоставляет другим
  • @ExportAsService — публикация компонента как OSGi-сервиса
  • @ComponentImport — импорт сервиса из Jira или другого плагина

Частые ошибки

  • Добавление зависимостей без provided scope — плагин тащит конфликтующие библиотеки
  • Использование библиотек, несовместимых с OSGi (например, некоторые версии Guava, Jackson)
  • Забыть atlas-package после изменений — QuickReload подхватывает только скомпилированный JAR
  • Разработка с версией Jira, отличной от production — API может отличаться

Как используется в 2026

  • Atlassian SDK продолжает поддерживаться для DC, но Atlassian не добавляет новых функций
  • AMPS (Atlassian Maven Plugin Suite) версии 8.x — актуальная версия
  • DC 9.x и 10.x — актуальные версии Jira для разработки
  • Сообщество активно использует Docker для локальной разработки как альтернативу atlas-run

На собеседовании: покажите знание основных команд SDK (atlas-run, atlas-debug, atlas-package) и понимание OSGi-модели. Ключевой момент: зависимости Jira API имеют scope provided, потому что они уже есть в рантайме. QuickReload ускоряет цикл разработки без перезапуска Jira.