[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jira-chto-takoe-atlassian-plugin-xml-i-kakie-moduli-plagina-sushchestvuyut":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},921,"chto-takoe-atlassian-plugin-xml-i-kakie-moduli-plagina-sushchestvuyut",27,"jira","Jira","📋","Что такое atlassian-plugin.xml и какие модули плагина существуют?","atlassian-plugin.xml — центральный дескриптор P2-плагина, определяющий метаданные плагина и перечисляющий все модули (точки расширения), которые плагин предоставляет.\n\n### Базовая структура\n\n```xml\n\u003Catlassian-plugin key=\"com.example.my-plugin\" name=\"My Jira Plugin\"\n                  plugins-version=\"2\">\n    \u003Cplugin-info>\n        \u003Cdescription>Описание плагина\u003C\u002Fdescription>\n        \u003Cversion>1.0.0\u003C\u002Fversion>\n        \u003Cvendor name=\"Example Corp\" url=\"https:\u002F\u002Fexample.com\"\u002F>\n        \u003Cparam name=\"plugin-icon\">images\u002Fplugin-icon.png\u003C\u002Fparam>\n        \u003Cparam name=\"atlassian-data-center-status\">compatible\u003C\u002Fparam>\n        \u003Cparam name=\"atlassian-data-center-compatible\">true\u003C\u002Fparam>\n    \u003C\u002Fplugin-info>\n\u003C\u002Fatlassian-plugin>\n```\n\n### Основные типы модулей\n\n| Модуль | Назначение | Пример key |\n|---|---|---|\n| REST Module | REST-эндпоинты (JAX-RS) | `\u003Crest>` |\n| Servlet Module | HTTP-сервлеты, веб-страницы | `\u003Cservlet>` |\n| Web Item | Ссылки в UI Jira | `\u003Cweb-item>` |\n| Web Section | Секция для группировки web-items | `\u003Cweb-section>` |\n| Web Panel | HTML-панели в страницах Jira | `\u003Cweb-panel>` |\n| Web Resource | CSS, JS ресурсы | `\u003Cweb-resource>` |\n| Component | Spring-компонент плагина | `\u003Ccomponent>` |\n| Component Import | Импорт компонента из Jira | `\u003Ccomponent-import>` |\n| Workflow Function | Расширения workflow | `\u003Cworkflow-function>` |\n| Custom Field Type | Кастомный тип поля | `\u003Ccustomfield-type>` |\n| Listener | Обработчик событий | `\u003Clistener>` |\n| Report | Отчёт | `\u003Creport>` |\n\n\u003Cdetails>\n\u003Csummary>Примеры объявления модулей в XML\u003C\u002Fsummary>\n\n```xml\n\u003C!-- REST Module -->\n\u003Crest key=\"my-rest\" path=\"\u002Fmyapi\" version=\"1.0\">\n    \u003Cdescription>REST API плагина\u003C\u002Fdescription>\n\u003C\u002Frest>\n\n\u003C!-- Servlet Module -->\n\u003Cservlet key=\"my-servlet\" class=\"com.example.MyServlet\">\n    \u003Curl-pattern>\u002Fmy-page\u003C\u002Furl-pattern>\n\u003C\u002Fservlet>\n\n\u003C!-- Web Item -->\n\u003Cweb-item key=\"my-link\" section=\"jira.issue.tools\" weight=\"100\">\n    \u003Clabel>Мой пункт меню\u003C\u002Flabel>\n    \u003Clink>\u002Fplugins\u002Fservlet\u002Fmy-page?issueKey=${issue.key}\u003C\u002Flink>\n    \u003Ccondition class=\"com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition\"\u002F>\n\u003C\u002Fweb-item>\n\n\u003C!-- Web Panel -->\n\u003Cweb-panel key=\"my-panel\" location=\"atl.jira.view.issue.right.context\" weight=\"200\">\n    \u003Clabel>Дополнительная информация\u003C\u002Flabel>\n    \u003Cresource name=\"view\" type=\"velocity\" location=\"templates\u002Fmy-panel.vm\"\u002F>\n    \u003Ccontext-provider class=\"com.example.MyPanelContextProvider\"\u002F>\n\u003C\u002Fweb-panel>\n\n\u003C!-- Web Resource -->\n\u003Cweb-resource key=\"my-resources\" name=\"Plugin Resources\">\n    \u003Cdependency>com.atlassian.auiplugin:ajs\u003C\u002Fdependency>\n    \u003Cresource type=\"download\" name=\"app.js\" location=\"js\u002Fapp.js\"\u002F>\n    \u003Cresource type=\"download\" name=\"styles.css\" location=\"css\u002Fstyles.css\"\u002F>\n    \u003Ccontext>atl.general\u003C\u002Fcontext>\n\u003C\u002Fweb-resource>\n\n\u003C!-- Workflow Function -->\n\u003Cworkflow-function key=\"my-postfunction\"\n                   class=\"com.example.MyPostFunctionFactory\">\n    \u003Cfunction-class>com.example.MyPostFunction\u003C\u002Ffunction-class>\n    \u003Corderable>true\u003C\u002Forderable>\n    \u003Cunique>false\u003C\u002Funique>\n    \u003Cresource name=\"view\" type=\"velocity\" location=\"templates\u002Fpostfunction-view.vm\"\u002F>\n\u003C\u002Fworkflow-function>\n\n\u003C!-- Custom Field Type -->\n\u003Ccustomfield-type key=\"my-field\" class=\"com.example.MyCustomField\">\n    \u003Cname>Моё кастомное поле\u003C\u002Fname>\n    \u003Cresource name=\"view\" type=\"velocity\" location=\"templates\u002Ffield-view.vm\"\u002F>\n    \u003Cresource name=\"edit\" type=\"velocity\" location=\"templates\u002Ffield-edit.vm\"\u002F>\n\u003C\u002Fcustomfield-type>\n```\n\n\u003C\u002Fdetails>\n\n### Частые ошибки\n\n- Дублирование key в модулях — key должен быть уникальным в рамках плагина\n- Объявление component-import для сервисов, которые уже доступны через Spring Scanner `@ComponentImport`\n- Неправильная секция (section\u002Flocation) для web-item\u002Fweb-panel — элемент просто не появляется в UI\n- Отсутствие `\u003Ccondition>` для web-item — пункт меню виден всем, включая анонимных пользователей\n\n### Как используется в 2026\n\n- XML-дескриптор остаётся обязательным для P2-плагинов, но содержимое минимизируется за счёт аннотаций\n- Spring Scanner 2.x — стандарт, 1.x считается устаревшим\n- Параметр `atlassian-data-center-compatible=true` обязателен для публикации на Marketplace\n- Atlassian рекомендует минимизировать количество модулей для ускорения загрузки плагина\n\n> **На собеседовании:** покажите знание основных типов модулей и их назначения. Отметьте, что `plugins-version=\"2\"` означает формат P2 (OSGi). С Spring Scanner 2.x многие модули (component, component-import) можно объявлять через аннотации, но workflow-function и custom-field-type по-прежнему требуют XML.","","middle",[15,16,17,7],"configuration","atlassian-sdk","jira-plugin",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":35,"featuredSnippetReady":36},"Что такое atlassian-plugin.xml и какие модули плагина существуют — Gymterview","Дескриптор atlassian-plugin.xml: REST, Servlet, Web Item\u002FPanel\u002FResource, Workflow Function, Custom Field Type, Component, Listener. Примеры XML.","atlassian-plugin.xml: модули P2-плагина Jira — Gymterview","Центральный дескриптор P2-плагина: 12 типов модулей, примеры XML-объявлений, Spring Scanner 2.x vs XML.",[26,27,28,29,30,31,32,33,34],"atlassian-plugin.xml","P2 модули","web-item","web-panel","servlet","REST module","workflow-function","custom-field-type","Jira DC","atlassian-plugin.xml — центральный дескриптор P2-плагина с plugins-version=\"2\" (формат OSGi). Основные модули: REST (JAX-RS эндпоинты), Servlet (веб-страницы), Web Item\u002FSection\u002FPanel\u002FResource (UI-элементы), Component\u002FComponent Import (Spring-компоненты), Workflow Function (post-function, condition, validator), Custom Field Type, Listener, Report. Spring Scanner 2.x позволяет заменить часть XML аннотациями.",true]