Jira DC 플러그인 개발을 하면서 프레임워크같은데 프레임워크가 아닌것 같은 느낌을 받았다. 무슨 말이냐면, 개발자에게 강제하는 부분이 있는가하면 또 자유로운 부분이 있다. 예를 들면, 스프링 스캐너를 사용하여 스프링의 애노테이션을 사용하려면 사용할수가 있다. 그래서 더 모호하고 어렵다. 어떤게 좋은 코드가 될 지 한눈에 들어오지 않는다.
그래서 나는 스프링의 애노테이션과 JAX-RS를 병행하는 방법을 택했다.
이 Jira DC Plugin은 기본이 JAX-RS이다. JAX-RS는 Java For XML Restful Web Service의 약자로 자바의 또 하나의 웹 애플리케이션 개발 방법이다. 그래서 깊이 있게 알아보기 전 프로젝트 구조를 먼저 살펴보자.
프로젝트 구조
.
├── LICENSE
├── README
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── atlassian
│ │ └── tutorial
│ │ └── myPlugin
│ │ ├── api
│ │ │ └── MyPluginComponent.java
│ │ └── impl
│ │ └── MyPluginComponentImpl.java
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── plugin-context.xml
│ ├── atlassian-plugin.xml
│ ├── css
│ │ └── myPlugin.css
│ ├── images
│ │ ├── pluginIcon.png
│ │ └── pluginLogo.png
│ ├── myPlugin.properties
│ └── js
│ └── myPlugin.js
└── test
├── java
│ ├── it
│ │ └── com
│ │ └── atlassian
│ │ └── tutorial
│ │ └── myPlugin
│ │ └── MyComponentWiredTest.java
│ └── ut
│ └── com
│ └── atlassian
│ └── tutorial
│ └── myPlugin
│ └── MyComponentUnitTest.java
└── resources
└── atlassian-plugin.xml
스프링과 유사한 구조를 가지고 있다. src/main/java, src/main/resources, src/test/java, src/test/resources.
Add-on Descriptor (atlassian-plugin.xml)
근데, 리소스를 추가하고 설정하는 방법이 XML을 사용한다.
그리고 그 파일은 src/main/resources 안에 있는 atlassian-plugin.xml 파일이다.
이 파일이 어떻게보면 가장 중요한 파일이라고 볼 수 있다.
atlassian-plugin.xml
<atlassian-plugin key="${atlassian.plugin.key}" name="${project.name}" plugins-version="2">
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}" url="${project.organization.url}" />
<param name="plugin-icon">images/pluginIcon.png</param>
<param name="plugin-logo">images/pluginLogo.png</param>
</plugin-info>
<!-- add our i18n resource -->
<resource type="i18n" name="i18n" location="myPlugin"/>
<!-- add our web resources -->
<web-resource key="myPlugin-resources" name="myPlugin Web Resources">
<dependency>com.atlassian.auiplugin:ajs</dependency>
<resource type="download" name="myPlugin.css" location="/css/myPlugin.css"/>
<resource type="download" name="myPlugin.js" location="/js/myPlugin.js"/>
<resource type="download" name="images/" location="/images"/>
<context>myPlugin</context>
</web-resource>
</atlassian-plugin>
만약 내가 커스텀 JQL 함수를 만들기 위해 플러그인을 개발한다 하면 이 파일에 리소스를 등록해야 한다.
만약 내가 워크플로우의 컨디션을 커스텀하기 위해 플러그인을 개발한다 하면 이 파일에 리소스를 등록해야 한다.
어떤 특정 리소스를 만들던 이 파일에 그 리소스를 등록해야 한다.
이후에 리소스를 개발하면서 하나씩 알아보자.
우선, 가장 먼저 나는 스프링 스캐너를 사용하기 위한 설정을 했다. Atlassian Plugin은 또 atlassian-spring-scanner 라는 것을 사용한다. 그래서 pom.xml에 이런 설정을 해줘야 한다.
버전
<properties>
...
<atlassian.spring.scanner.version>2.2.4</atlassian.spring.scanner.version>
...
</properties>
의존성
<dependency>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-annotation</artifactId>
<version>${atlassian.spring.scanner.version}</version>
<scope>provided</scope>
</dependency>
빌드 플러그인
<build>
<plugins>
...
<plugin>
<groupId>com.atlassian.plugin</groupId>
<artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
<version>${atlassian.spring.scanner.version}</version>
<executions>
<execution>
<goals>
<goal>atlassian-spring-scanner</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
<configuration>
<verbose>false</verbose>
</configuration>
</plugin>
</plugins>
</build>
버전은 2.x 를 사용한다. 3.x 버전도 있는것 같은데 거의 관련 내용이나 문서가 없어서 시도하지 않기로 했다.
pom.xml 파일은 이렇게 설정을 하면 되고, 이게 끝이 아니다.
`src/main/resources/META-INF/spring/plugin-context.xml` 파일에서 스프링 설정을 해줘야 한다.
plugin-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:atlassian-scanner="http://www.atlassian.com/schema/atlassian-scanner/2"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.atlassian.com/schema/atlassian-scanner/2
http://www.atlassian.com/schema/atlassian-scanner/2/atlassian-scanner.xsd">
<atlassian-scanner:scan-indexes/>
</beans>
이렇게 설정을 해주면, atlassian-spring-scanner를 사용할 수 있다! 그 말은 애노테이션으로 자동 스캔이나 주입이 가능해진다는 말이다.
Jira Version, AMPS Version
아래 명령어를 사용해서 스켈레톤 프로젝트를 만들면 자동으로 JIRA, AMPS 버전을 선정해준다.
atlas-create-jira-plugin
버전을 확인하는 방법은 pom.xml 파일에 있다.
<properties>
<jira.version>9.12.2</jira.version>
<amps.version>8.14.3</amps.version>
...
</properties>
버전은 원하는 버전으로 변경할 수도 있다.
i18n
특히나 Atlassian 제품은 국제적으로 사용하는 제품이기 때문에 국제화가 거의 필수다. 그래서 i18n 리소스가 반드시 필요하다. 플러그인을 좀 더 완성도 높게 하려면.
그리고 이 파일은 `src/main/resources` 안에 작성하면 된다. 나 같은 경우는 간단하게 영어, 한국어에 대한 리소스를 만들었다.
이렇게 리소스를 만들면 역시 이것도 atlassian-plugin.xml 파일에 등록해야 한다.
atlassian-plugin.xml
<atlassian-plugin key="${atlassian.plugin.key}" name="${project.name}" plugins-version="2">
...
<!-- add our i18n resource -->
<resource type="i18n" name="i18n" location="kapproval"/>
...
</atlassian-plugin>
location은 Bundle의 이름을 적으면 된다.
간단하게 구조에 대해 이해해 보았다. 이제 Part.3에서 리소스를 하나씩 만들면서 어떤 설정이 필요하고 어떤 작업을 해줘야 하는지 하나씩 알아보자.
'Jira & ScriptRunner' 카테고리의 다른 글
Jira DC 플러그인 개발 Part.6 - JQL Function 만들기 (0) | 2024.07.16 |
---|---|
Jira DC 플러그인 개발 Part.5 - 상단 네비게이션 바에 앱 링크 노출하기 (0) | 2024.07.16 |
Jira DC 플러그인 개발 Part.4 - ActiveObjects ORM (0) | 2024.07.15 |
Jira DC 플러그인 개발 Part.3 관리자 화면 메뉴 섹션 (0) | 2024.07.15 |
Jira DC 플러그인 개발 Part.1 - 설정 (0) | 2024.07.13 |