2024-07-30 16:02:46 +02:00

3.1 KiB

Plugin Content

Layout and contents of a plugin distribution file.

Plugin distribution are built using the dedicated Gradle buildPlugin task (Reference: 2.x, 1.x) or Plugin DevKit.

The plugin distribution .jar file contains:

  • configuration file (META-INF/plugin.xml) (Plugin Configuration File)
  • classes implementing the plugin functionality
  • recommended: plugin logo file(s) (META-INF/pluginIcon*.svg) (Plugin Logo)

See for important steps to optimize the plugin distribution file.

Targeting a plugin distribution to a specific OS is not possible (issue).

Plugin Without Dependencies

A plugin consisting of a single .jar file is placed in the /plugins directory.

@startuml

skinparam TitleFontName JetBrains Sans
skinparam TitleFontStyle plain
skinparam TitleFontSize 16
skinparam DefaultTextAlignment left

title
  <IDE directory>
  |_ plugins
    |_ sample.jar // (Plugin distribution) //
      |_ com
        |_ company
          |_ Sample.class // (Class ""com.company.Sample"") //
      |_ ...
      |_ META-INF
        |_ plugin.xml // (Plugin Configuration File) //
        |_ pluginIcon.svg // (Plugin Logo) //
        |_ pluginIcon_dark.svg // (Plugin Logo, dark variant) //
end title
@enduml

Plugin With Dependencies

The plugin .jar file is placed in the /lib folder under the plugin's "root" folder, together with all required bundled libraries.

All JARs from the /lib folder are automatically added to the classpath (see also Plugin Class Loaders).

Do not repackage libraries into the main plugin JAR file. Otherwise, Plugin Verifier will yield false positives for unresolved classes and methods.

{title="Do Not Repackage Libraries" style="warning"}

@startuml

skinparam TitleFontName JetBrains Sans
skinparam TitleFontStyle plain
skinparam TitleFontSize 16
skinparam DefaultTextAlignment left

title
  <IDE directory>
  |_ plugins
    |_ sample
      |_ lib
        |_ lib_foo.jar // (Required bundled library #1) //
        |_ lib_bar.jar // (Required bundled library #2) //
        |_ ...
        |_ sample.jar // (Plugin distribution) //
          |_ com
            |_ company
              |_ Sample.class // (Class ""com.company.Sample"") //
          |_ ...
          |_ META-INF
            |_ plugin.xml // (Plugin Configuration File) //
            |_ pluginIcon.svg // (Plugin Logo) //
            |_ pluginIcon_dark.svg // (Plugin Logo, dark variant) //
end title
@enduml