IntelliJ Platfrom Plugin

IntelliJ Platform Plugin SDK 공식문서 읽기 - Bundling Plugin API Sources

PI.314 2022. 10. 19. 23:22

Bundling Plugin API Sources

플러그인이 다른 플러그인이 사용하도록 되어 있는 자체 API를 노출한다면 ZIP 배포에서 플러그인의 API 소스를 번들링하는 것을 고려할 가치가 있습니다.
 

타사 플러그인이 Gradle IntelliJ Plugin을 사용하고 ZIP 배포의 소스를 번들하는 플러그인에 종속성을 추가하는 경우 소스는 플러그인 라이브러리에 자동으로 연결되고 개발자가 API 클래스로 이동할 때 IDE에 표시됩니다. API 소스를 볼 수 있게 되면 개발 경험이 획기적으로 향상되므로 번들링하는 것이 좋습니다.

 

(Gradle IntelliJ Plugin 1.7.0부터 IDE에 번들 플러그인 소스를 연결할 수 있습니다.)

API sources location

API 소스 JAR은 플러그인 ZIP 배포판의 example-plugin.zip!/plugin/lib/src 디렉토리에 있어야 합니다.

플러그인 ZIP에는 여러 소스 JAR이 포함될 수 있으며 소스 JAR 이름에 대한 엄격한 규칙은 없습니다.

Defining Plugin API

일반적으로 다음 클래스는 플러그인 API로 간주됩니다.
API는 안정적이어야 하며 호환되지 않는 모든 변경으로 인해 클라이언트 플러그인이 중단될 수 있으므로 거의 변경되지 않습니다.
또한 플러그인 코드를 명확한 책임이 있는 여러 모듈에 구성하는 것이 좋습니다.
 
예시:
  • example-plugin-api - a module containing API
  • example-plugin-impl - a module containing plugin features code that are not meant to be extended or used by client plugins

API를 정의하는 일반적인 규칙은 클라이언트 플러그인 코드에 의해 소비 될 수 있는 클래스를 포함하는 것입니다. 물론 더 복잡한 플러그인은 더 세밀한 구조가 필요할 수 있습니다. Gradle IntelliJ Plugin - Usage Examples를 참조하세요.

 

Bundling API Sources in Gradle Build Script

가장 간단한 경우, 프로젝트가 단일 모듈로 구성되어 있고 플러그인 API가 패키지에서 명확하게 격리되어 있다면, 소스 JAR 포함하는
e.g com.example.plugin.openapi는 Gradle 빌드 스크립트의 task 섹션에 다음 스니펫을 추가하여 달성할 수 있습니다.
task createOpenApiSourceJar(type: Jar) {
  // Java sources
  from(sourceSets.main.java) {
    include '**/com/example/plugin/openapi/**/*.java'
  }
  // Kotlin sources
  from(sourceSets.main.kotlin) {
    include '**/com/example/plugin/openapi/**/*.kt'
  }
  destinationDirectory = layout.buildDirectory.dir('libs')
  archiveClassifier = 'src'
}

buildPlugin {
  dependsOn(createOpenApiSourceJar)
  from(createOpenApiSourceJar) { into 'lib/src' }
}