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 или другого плагина
Частые ошибки
- Добавление зависимостей без
providedscope — плагин тащит конфликтующие библиотеки - Использование библиотек, несовместимых с 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.