728x90
반응형
SMALL

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` 안에 작성하면 된다. 나 같은 경우는 간단하게 영어, 한국어에 대한 리소스를 만들었다.

 

kapproval.properties
kapproval_ko.properties

 

이렇게 리소스를 만들면 역시 이것도 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>

locationBundle의 이름을 적으면 된다.

간단하게 구조에 대해 이해해 보았다. 이제 Part.3에서 리소스를 하나씩 만들면서 어떤 설정이 필요하고 어떤 작업을 해줘야 하는지 하나씩 알아보자. 

 

728x90
반응형
LIST

+ Recent posts