IntelliJ Platform Gradle Plugin: tasks (patchPluginXml), extensions (intellijPlatform), new content structure

This commit is contained in:
Jakub Chrzanowski 2024-01-31 15:08:16 +01:00
parent ad4b4c4497
commit 4f96f242c0
No known key found for this signature in database
GPG Key ID: C39095BFD769862E
9 changed files with 1162 additions and 9 deletions

View File

@ -406,7 +406,15 @@
<toc-element toc-title="Migration Guide from 0.x to 1.x"
target-for-accept-web-file-names="https://lp.jetbrains.com/gradle-intellij-plugin/"/>
</toc-element>
<toc-element topic="tools_intellij_platform_gradle_plugin.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin.md">
<toc-element topic="tools_intellij_platform_gradle_plugin_extension.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_repositories_extension.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_dependencies_extension.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_tasks.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_task_awares.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_build_features.md"/>
<toc-element topic="tools_intellij_platform_gradle_plugin_migration.md"/>
</toc-element>
<toc-element topic="tools_gradle_grammar_kit_plugin.md"/>
<toc-element toc-title="IDE Tooling">
<toc-element topic="internal_actions_intro.md" accepts-web-file-names="interal_actions_menu.html">

View File

@ -150,7 +150,7 @@ dependencyResolutionManagement {
repositories {
mavenCentral()
intellijPlatform {
recommended()
}
@ -165,11 +165,7 @@ dependencyResolutionManagement {
Some repositories, by default, point to JetBrains Cache Redirector to provide better resources resolution.
However, it is possible to use the direct repository URL, if available.
To switch off the default usage of JetBrains Cache Redirector, add to <path>gradle.properties</path>:
```
org.jetbrains.intellij.platform.buildFeature.useCacheRedirector=false
```
To switch off the default usage of JetBrains Cache Redirector, see the [](tools_intellij_platform_gradle_plugin_build_features.md#useCacheRedirector) build feature.
### Setting up IntelliJ Platform
@ -228,7 +224,7 @@ dependencies {
intellijPlatform {
val type = providers.gradleProperty("platformType")
val version = providers.gradleProperty("platformVersion")
intellijPlatform(type, version)
}
}
@ -242,7 +238,7 @@ import org.jetbrains.intellij.platform.gradle.utils.IntelliJPlatformType
dependencies {
intellijPlatform {
val version = providers.gradleProperty("platformVersion")
intellijPlatform(IntelliJPlatformType.IntellijIdeaUltimate, version)
}
}

View File

@ -0,0 +1,100 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Build Features
<link-summary>IntelliJ Platform Gradle Plugin build features.</link-summary>
The IntelliJ Platform Gradle Plugin build features dedicated to control some of the low-level Gradle plugin behaviors.
To enable or disable a particular feature, add a Project property to the <path>gradle.properties</path> file with the following pattern:
```
org.jetbrains.intellij.buildFeature.<buildFeatureName>=<true|false>
```
E.g., to disable the [](#selfUpdateCheck) feature, add this line:
```
org.jetbrains.intellij.platform.buildFeature.selfUpdateCheck=false
```
## noSearchableOptionsWarning
{#noSearchableOptionsWarning}
When the [](tools_intellij_platform_gradle_plugin_tasks.md#buildSearchableOptions) doesn't produce any results, e.g., when the plugin doesn't implement any [Settings](settings.md), a warning is shown to suggest disabling it for better performance with [](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-buildSearchableOptions).
{style="narrow"}
Default value
: `true`
Example
:
```
org.jetbrains.intellij.buildFeature.buildSearchableOptions=false
```
See also:
- [Tasks: buildSearchableOptions`](tools_intellij_platform_gradle_plugin_tasks.md#buildSearchableOptions)
- [Build Features: `noSearchableOptionsWarning`](tools_intellij_platform_gradle_plugin_build_features.md#noSearchableOptionsWarning)
## paidPluginSearchableOptionsWarning
{#paidPluginSearchableOptionsWarning}
Due to IDE limitations, it is impossible to run the IDE in headless mode to collect searchable options for a paid plugin.
As paid plugins require providing a valid license and presenting a UI dialog, it is impossible to handle such a case, and the task will fail.
This feature flag displays the given warning when the task is run by a paid plugin.
{style="narrow"}
Default value
: `true`
Example
:
```
org.jetbrains.intellij.platform.buildFeature.paidPluginSearchableOptionsWarning=false
```
## selfUpdateCheck
{#selfUpdateCheck}
Checks whether the currently used Gradle IntelliJ Plugin is outdated and if a new release is available.
The plugin performs an update check on every run asking the GitHub Releases page for the redirection URL
to the latest version with `HEAD` HTTP request: `https://github.com/jetbrains/gradle-intellij-plugin/releases/latest`.
If the current version is outdated, the plugin will emit a warning with its current and the latest version.
Feature respects the Gradle [`--offline`](https://docs.gradle.org/current/userguide/command_line_interface.html#sec:command_line_execution_options) mode.
> It is strongly suggested to always use the latest available version. Older plugin versions may also not fully support the latest IDE releases.
{style="narrow"}
Default value
: `true`
Example
:
```
org.jetbrains.intellij.platform.buildFeature.selfUpdateCheck=false
```
## useCacheRedirector
{#useCacheRedirector}
By default, JetBrains Cache Redirector is used when resolving Maven repositories or any resources used by the IntelliJ Platform Gradle Plugin.
Due to limitations, sometimes it is desired to limit the list of remote endpoints accessed by Gradle.
It is possible to refer to the direct location (whenever it is possible) by switching off JetBrains Cache Redirector globally.
{style="narrow"}
Default value
: `true`
Example
:
```
org.jetbrains.intellij.platform.buildFeature.useCacheRedirector=false
```

View File

@ -0,0 +1,8 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Dependencies Extension
<link-summary>IntelliJ Platform Gradle Plugin dependencies extension.</link-summary>
<include from="snippets.md" element-id="missingContent"/>

View File

@ -0,0 +1,510 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# IntelliJ Platform Extension
<link-summary>IntelliJ Platform Gradle Plugin extension.</link-summary>
The _IntelliJ Platform Gradle Plugin_ introduces a top-level `intellijPlatform` extension.
It consists of sections dedicated to the general Gradle plugin configuration, <path>plugin.xml</path> definition, publishing, signing, and verifying of the output plugin for IntelliJ-based IDEs.
## IntelliJ Platform
{#intellijPlatform}
After the IntelliJ Platform Gradle Plugin is applied, the `intellijPlatform` extension can be used to configure the plugin and common settings of the provided tasks.
**Example:**
```kotlin
intellijPlatform {
instrumentCode.set(true)
buildSearchableOptions.set(true)
sandboxContainer.set("...")
pluginConfiguration { ... }
publishing { ... }
signing { ... }
verifyPlugin { ... }
}
```
### instrumentCode
{#intellijPlatform-instrumentCode}
> Not implemented.
>
{style="warning"}
Enables the compiled classes instrumentation.
The compiled code will be enhanced with:
- nullability assertions
- post-processing of forms created by IntelliJ GUI Designer
Controls the execution of the [](tools_intellij_platform_gradle_plugin_tasks.md#instrumentCode) task.
{style="narrow"}
Type
: `Property<Boolean>`
Default value
: `true`
See also:
- [Tasks: `instrumentCode`](tools_intellij_platform_gradle_plugin_tasks.md#instrumentCode)
### buildSearchableOptions
{#intellijPlatform-buildSearchableOptions}
Builds an index of UI components (searchable options) for the plugin.
Controls the execution of the [](tools_intellij_platform_gradle_plugin_tasks.md#buildSearchableOptions) task.
{style="narrow"}
Type
: `Property<Boolean>`
Default value
: `true`
See also:
- [Tasks: `buildSearchableOptions`](tools_intellij_platform_gradle_plugin_tasks.md#buildSearchableOptions)
- [Build Features: `noSearchableOptionsWarning`](tools_intellij_platform_gradle_plugin_build_features.md#noSearchableOptionsWarning)
### sandboxContainer
{#intellijPlatform-sandboxContainer}
The path to the sandbox container where tests and IDE instances read and write data.
{style="narrow"}
Type
: `DirectoryProperty`
Default value
: <path>build/<Sandbox.CONTAINER></path>
See also:
- [Tasks: `prepareSandbox`](tools_intellij_platform_gradle_plugin_tasks.md#prepareSandbox)
- [Task Awares: `SandboxAware`](tools_intellij_platform_gradle_plugin_task_awares.md#SandboxAware)
## Plugin Configuration
{#intellijPlatform-pluginConfiguration}
Configures the plugin definition and stores in the `plugin.xml` file.
Data provided to the `intellijPlatform.pluginConfiguration {}` extension is passed to the [](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml) task, which overrides the <path>plugin.xml</path> file with new values.
**Example:**
```kotlin
intellijPlatform {
...
pluginConfiguration {
id.set("my-plugin-id")
name.set("My Awesome Plugin")
version.set("1.0.0")
description.set("It's an awesome plugin!")
changeNotes.set(
"""
A descriptive release note...
""".trimIndent()
)
productDescriptor { ... }
ideaVersion { ... }
vendor { ... }
}
}
```
See also:
- [](#intellijPlatform-pluginConfiguration-productDescriptor)
- [](#intellijPlatform-pluginConfiguration-ideaVersion)
- [](#intellijPlatform-pluginConfiguration-vendor)
### id
{#intellijPlatform-pluginConfiguration-id}
The plugin's unique identifier.
This should mirror the structure of fully qualified Java packages and must remain distinct from the IDs of existing plugins.
This ID is a technical descriptor used not only within the IDE, but also on [JetBrains Marketplace](https://plugins.jetbrains.com/).
Please restrict input to characters, numbers, and `.`/`-`/`_` symbols , and aim for a concise length.
The entered value will populate the `<id>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.pluginId`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-pluginId)
- [Plugin Configuration File: `id`](plugin_configuration_file.md#idea-plugin__id)
### name
{#intellijPlatform-pluginConfiguration-name}
The plugin display name, visible to users (Title Case).
The inputted value will be used to populate the `<name>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.pluginName`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-pluginName)
- [Plugin Configuration File: `name`](plugin_configuration_file.md#idea-plugin__name)
### version
{#intellijPlatform-pluginConfiguration-version}
The plugin version, presented in the Plugins settings dialog and on its JetBrains Marketplace page.
For plugins uploaded to the JetBrains Marketplace, semantic versioning must be adhered to.
The specified value will be used as an `<version>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.pluginVersion`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-pluginVersion)
- [Plugin Configuration File: `version`](plugin_configuration_file.md#idea-plugin__version)
### description
{#intellijPlatform-pluginConfiguration-description}
The plugin description, which is presented on the JetBrains Marketplace plugin page and in the Plugins settings dialog.
Basic HTML elements such as text formatting, paragraphs, and lists are permitted.
The description content is automatically enclosed by `<![CDATA[... ]]>`.
The supplied value will populate the `<description>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.pluginDescription`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-pluginDescription)
- [Plugin Configuration File: `description`](plugin_configuration_file.md#idea-plugin__description)
### changeNotes
{#intellijPlatform-pluginConfiguration-changeNotes}
A concise summary of new features, bug fixes, and alterations provided in the latest plugin version.
These change notes will be displayed on the JetBrains Marketplace plugin page and in the Plugins settings dialog.
Basic HTML elements such as text formatting, paragraphs, and lists are permitted.
The change notes content is automatically encapsulated in `<![CDATA[... ]]>`.
The inputted value will populate the `<change-notes>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.changeNotes`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-changeNotes)
- [Plugin Configuration File: `change-notes`](plugin_configuration_file.md#idea-plugin__change-notes)
## Product Descriptor
{#intellijPlatform-pluginConfiguration-productDescriptor}
A part of the [](#intellijPlatform-pluginConfiguration) which describes the `product-descriptor` element.
**Example:**
```kotlin
intellijPlatform {
...
pluginConfiguration {
...
productDescriptor {
code.set("MY_CODE")
releaseDate.set("20240217")
releaseVersion.set("")
optional.set("")
}
}
}
```
### code
{#intellijPlatform-pluginConfiguration-productDescriptor-code}
The product code for the plugin, used in the JetBrains Sales System, needs to be pre-approved by JetBrains and must adhere to [specified requirements](https://plugins.jetbrains.com/docs/marketplace/obtain-a-product-code-from-jetbrains.html).
The given value will be utilized as a `<product-descriptor code="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.productDescriptorCode`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-productDescriptorCode)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### releaseDate
{#intellijPlatform-pluginConfiguration-productDescriptor-releaseDate}
The release date of the major version, formatted as `YYYYMMDD`.
The supplied value will be used to populate the `<product-descriptor release-date="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.productDescriptorReleaseDate`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-productDescriptorReleaseDate)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### releaseVersion
{#intellijPlatform-pluginConfiguration-productDescriptor-releaseVersion}
The major version, represented in a specific numerical format.
The given value will be used as the `<product-descriptor release-version="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.productDescriptorReleaseVersion`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-productDescriptorReleaseVersion)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### optional
{#intellijPlatform-pluginConfiguration-productDescriptor-optional}
The boolean value that indicates if the plugin is a [Freemium](https://plugins.jetbrains.com/docs/marketplace/freemium.html) plugin.
The inputted value will be used for the `<product-descriptor optional="">` element attribute.
{style="narrow"}
Type
: `Property<Boolean>`
Default value
: `false`
See also:
- [Tasks: `patchPluginXml.productDescriptorOptional`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-productDescriptorOptional)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
## IDEA Version
{#intellijPlatform-pluginConfiguration-ideaVersion}
Configures the `idea-version` section of the plugin.
A part of the [](#intellijPlatform-pluginConfiguration) which describes the `idea-version` element.
**Example:**
```kotlin
intellijPlatform {
...
pluginConfiguration {
...
ideaVersion {
sinceBuild.set("241")
untilBuild.set("241.*")
}
}
}
```
### sinceBuild
{#intellijPlatform-pluginConfiguration-ideaVersion-sinceBuild}
The earliest IDE version that is compatible with the plugin.
The supplied value will be utilized as the `<idea-version since-build=""/>` element attribute.
The default value is set to the `MAJOR.MINOR` version based on the currently selected IntelliJ Platform, like `233.12345`.
{style="narrow"}
Type
: `Property<String>`
Default value
: `MAJOR.MINOR`
See also:
- [Tasks: `patchPluginXml.sinceBuild`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-sinceBuild)
- [Plugin Configuration File: `idea-version`](plugin_configuration_file.md#idea-plugin__idea-version)
### untilBuild
{#intellijPlatform-pluginConfiguration-ideaVersion-untilBuild}
The latest IDE version that is compatible with the plugin. An undefined value signifies compatibility with all IDEs starting from the version mentioned in `since-build`, including potential future builds that may cause compatibility issues.
The given value will be assigned to the `<idea-version until-build=""/>` element attribute.
The default value is set to the `MAJOR.*` version based on the currently selected IntelliJ Platform, such as `233.*`.
{style="narrow"}
Type
: `Property<String>`
Default value
: `MAJOR.*`
See also:
- [Tasks: `patchPluginXml.untilBuild`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-untilBuild)
- [Plugin Configuration File: `idea-version`](plugin_configuration_file.md#idea-plugin__idea-version)
## Vendor
{#intellijPlatform-pluginConfiguration-vendor}
Configures the `idea-version` section of the plugin.
A part of the [](#intellijPlatform-pluginConfiguration) which describes the `vendor` element.
**Example:**
```kotlin
intellijPlatform {
...
pluginConfiguration {
...
vendor {
name.set("JetBrains")
email.set("hello@jetbrains.com")
url.set("https://www.jetbrains.com")
}
}
}
```
### name
{#intellijPlatform-pluginConfiguration-vendor-name}
The name of the vendor or the organization ID (if created), as displayed in the Plugins settings dialog and on the JetBrains Marketplace plugin page.
The supplied value will be used as the value for the `<vendor>` element.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.vendorName`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-vendorName)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
### email
{#intellijPlatform-pluginConfiguration-vendor-email}
The email address of the vendor.
The given value will be utilized as the `<vendor email="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.vendorEmail`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-vendorEmail)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
### url
{#intellijPlatform-pluginConfiguration-vendor-url}
The URL to the vendor's homepage.
The supplied value will be assigned to the `<vendor url="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.vendorUrl`](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml-vendorUrl)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
## Publishing
{#intellijPlatform-publishing}
Configures the publishing process of the plugin.
All values are passed to the [](tools_intellij_platform_gradle_plugin_tasks.md#publishPlugin) task.
**Example:**
```kotlin
intellijPlatform {
...
publishing {
host.set("")
token.set("7hR4nD0mT0k3n_8f2eG")
channel.set("default")
toolboxEnterprise.set(false)
hidden.set(false)
}
}
```
### host
{#intellijPlatform-publishing-host}
The hostname used for publishing the plugin.
{style="narrow"}
Type
: `Property<String>`
See also:
- [Tasks: `patchPluginXml.vendorUrl`](tools_intellij_platform_gradle_plugin_tasks.md#publishPlugin)
### token
{#intellijPlatform-publishing-token}
### channel
{#intellijPlatform-publishing-channel}
### toolboxEnterprise
{#intellijPlatform-publishing-toolboxEnterprise}
### hidden
{#intellijPlatform-publishing-hidden}
## Signing
{#intellijPlatform-signing}
## Verify Plugin
{#intellijPlatform-verifyPlugin}
<include from="snippets.md" element-id="missingContent"/>

View File

@ -0,0 +1,34 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Migration Guide from Gradle IntelliJ Plugin
<link-summary>This is the IntelliJ Platform Gradle Plugin migration guide from the Gradle IntelliJ Plugin 1.x</link-summary>
## Plugin name change
As the `2.x` branch brings significant breaking changes to the plugin, we also decided to change its name from _Gradle IntelliJ Plugin_ to _IntelliJ Platform Gradle Plugin_ as the old one was confused with the Gradle support plugin for IntelliJ-based IDEs.
The plugin is published to the Gradle Plugin Portal with a new name as a new entry, and the old one is marked as deprecated.
## Plugin ID change
Plugin ID has changed from `org.jetbrains.intellij` to `org.jetbrains.intellij.platform`.
To apply is, use:
```kotlin
plugins {
id("org.jetbrains.intellij.platform")
}
```
## Minimal Gradle version
The minimal required Gradle version is now `8.0`.
## `intellij` extension
The `intellij {}` extension is no longer available and was replaced with `intellijPlatform {}` — note that the available properties differ.
## `setupDependencies` task
To make IntelliJ SDK dependency available in the IDE for class resolution and code completion, there was the `setupDependencies` task introduced in the Gradle IntelliJ Plugin 1.x.
With IntelliJ Platform Gradle Plugin, such a task is no longer required, but if you are switching from the previous approach, Gradle still may want to execute it in the _afterSync_ phase.
To completely drop this approach, it is mandatory to remove its reference manualy in your IDE:
1. Open Gradle Tool Window
2. Right-click on the main module and select _Tasks Activation_
3. In the _Tasks Activation_ modal window, find and remove the `setupDependencies` entry.

View File

@ -0,0 +1,8 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Repositories Extension
<link-summary>IntelliJ Platform Gradle Plugin repositories extension.</link-summary>
<include from="snippets.md" element-id="missingContent"/>

View File

@ -0,0 +1,39 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Task Awares
<link-summary>IntelliJ Platform Gradle Plugin task `*Aware` interfaces.</link-summary>
## CoroutinesJavaAgentAware
{#CoroutinesJavaAgentAware}
## CustomIntelliJPlatformVersionAware
{#CustomIntelliJPlatformVersionAware}
## IntelliJPlatformVersionAware
{#IntelliJPlatformVersionAware}
## PluginVerifierAware
{#PluginVerifierAware}
## RunnableIdeAware
{#RunnableIdeAware}
## RuntimeAware
{#RuntimeAware}
## SandboxAware
{#SandboxAware}
## SigningAware
{#SigningAware}
<include from="snippets.md" element-id="missingContent"/>

View File

@ -0,0 +1,450 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Tasks
<link-summary>IntelliJ Platform Gradle Plugin tasks.</link-summary>
## buildPlugin
{#buildPlugin}
## buildSearchableOptions
{#buildSearchableOptions}
See also:
- [Extension: `intellijPlatform.buildSearchableOptions`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-buildSearchableOptions)
- [Build Features: `noSearchableOptionsWarning`](tools_intellij_platform_gradle_plugin_build_features.md#noSearchableOptionsWarning)
## classpathIndexCleanup
{#classpathIndexCleanup}
## initializeIntelliJPlatformPlugin
{#initializeIntelliJPlatformPlugin}
## instrumentCode
{#instrumentCode}
> Not implemented.
>
{style="warning"}
See also:
- [Extension: `intellijPlatform.instrumentCode`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-instrumentCode)
## instrumentedJar
{#instrumentedJar}
## jarSearchableOptions
{#jarSearchableOptions}
## patchPluginXml
{#patchPluginXml}
### inputFile
{#patchPluginXml-inputFile}
Represents an input `plugin.xml` file.
By default, a <path>plugin.xml</path> file is picked from the main resource location.
{style="narrow"}
Type
: `RegularFileProperty`
Default value:
: <path>src/main/<kotlin|java>/resources/META-INF/plugin.xml</path>
### outputFile
{#patchPluginXml-outputFile}
Represents the output <path>plugin.xml</path> file property for a task.
By default, the file is written to a temporary task directory within the <path>build</path> directory.
{style="narrow"}
Type
: `RegularFileProperty`
Default value
: <path>build/tmp/patchPluginXml/plugin.xml</path>
### pluginId
{#patchPluginXml-pluginId}
A unique identifier of the plugin.
It should be a fully qualified name similar to Java packages and must not collide with the ID of existing plugins.
The ID is a technical value used to identify the plugin in the IDE and [JetBrains Marketplace](https://plugins.jetbrains.com/).
Please use characters, numbers, and `.`/`-`/`_` symbols only and keep it reasonably short.
The provided value will be set as a value of the `<id>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.id`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-id)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.id`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-id)
- [Plugin Configuration File: `id`](plugin_configuration_file.md#idea-plugin__id)
### pluginName
{#patchPluginXml-pluginName}
The user-visible plugin display name (Title Case).
The provided value will be set as a value of the `<name>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.name`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-name)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.name`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-name)
- [Plugin Configuration File: `name`](plugin_configuration_file.md#idea-plugin__name)
### pluginVersion
{#patchPluginXml-pluginVersion}
The plugin version is displayed in the Plugins settings dialog and on the JetBrains Marketplace plugin page.
Plugins uploaded to the JetBrains Marketplace must follow semantic versioning.
The provided value will be set as a value of the `<version>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.version`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-version)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.version`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-version)
- [Plugin Configuration File: `version`](plugin_configuration_file.md#idea-plugin__version)
### pluginDescription
{#patchPluginXml-pluginDescription}
The plugin description is displayed on the JetBrains Marketplace plugin page and in the Plugins settings dialog.
Simple HTML elements, like text formatting, paragraphs, lists, etc., are allowed.
The description content is automatically wrapped with `<![CDATA[... ]]>`.
The provided value will be set as a value of the `<description>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.description`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-description)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.description`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-description)
- [Plugin Configuration File: `description`](plugin_configuration_file.md#idea-plugin__description)
### changeNotes
{#patchPluginXml-changeNotes}
A short summary of new features, bugfixes, and changes provided with the latest plugin version.
Change notes are displayed on the JetBrains Marketplace plugin page and in the Plugins settings dialog.
Simple HTML elements, like text formatting, paragraphs, lists, etc., are allowed.
The change notes content is automatically wrapped with `<![CDATA[... ]]>`.
The provided value will be set as a value of the `<change-notes>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.changeNotes`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-changeNotes)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.changeNotes`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-changeNotes)
- [Plugin Configuration File: `change-notes`](plugin_configuration_file.md#idea-plugin__change-notes)
### productDescriptorCode
{#patchPluginXml-productDescriptorCode}
The plugin product code used in the JetBrains Sales System.
The code must be agreed with JetBrains in advance and follow [the requirements](https://plugins.jetbrains.com/docs/marketplace/obtain-a-product-code-from-jetbrains.html).
The provided value will be set as a value of the `<product-descriptor code="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.productDescriptor.code`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-code)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.productDescriptor.code`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-code)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### productDescriptorReleaseDate
{#patchPluginXml-productDescriptorReleaseDate}
Date of the major version release in the `YYYYMMDD` format.
The provided value will be set as a value of the `<product-descriptor release-date="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.productDescriptor.releaseDate`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-releaseDate)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.productDescriptor.releaseDate`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-releaseDate)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### productDescriptorReleaseVersion
{#patchPluginXml-productDescriptorReleaseVersion}
A major version in a special number format.
The provided value will be set as a value of the `<product-descriptor release-version="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.productDescriptor.releaseVersion`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-releaseVersion)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.productDescriptor.releaseVersion`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-releaseVersion)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### productDescriptorOptional
{#patchPluginXml-productDescriptorOptional}
The boolean value determining whether the plugin is a [Freemium](https://plugins.jetbrains.com/docs/marketplace/freemium.html) plugin.
The provided value will be set as a value of the `<product-descriptor optional="">` element attribute.
{style="narrow"}
Type
: `Property<Boolean>`
Default value
: [`intellijPlatform.pluginConfiguration.productDescriptor.optional`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-optional)
Default value
: `false`
See also:
- [Extension: `intellijPlatform.pluginConfiguration.productDescriptor.optional`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-productDescriptor-optional)
- [Plugin Configuration File: `product-descriptor`](plugin_configuration_file.md#idea-plugin__product-descriptor)
### sinceBuild
{#patchPluginXml-sinceBuild}
The lowest IDE version compatible with the plugin.
The provided value will be set as a value of the `<idea-version since-build=""/>` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.ideaVersion.sinceBuild`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-ideaVersion-sinceBuild)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.ideaVersion.sinceBuild`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-ideaVersion-sinceBuild)
- [Plugin Configuration File: `idea-version`](plugin_configuration_file.md#idea-plugin__idea-version)
### untilBuild
{#patchPluginXml-untilBuild}
The highest IDE version compatible with the plugin.
Undefined value declares compatibility with all the IDEs since the version specified by the `since-build` (also with the future builds that may cause incompatibility errors).
The provided value will be set as a value of the `<idea-version until-build=""/>` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.ideaVersion.untilBuild`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-ideaVersion-untilBuild)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.ideaVersion.untilBuild`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-ideaVersion-untilBuild)
- [Plugin Configuration File: `idea-version`](plugin_configuration_file.md#idea-plugin__idea-version)
### vendorName
{#patchPluginXml-vendorName}
The vendor name or organization ID (if created) in the Plugins settings dialog and on the JetBrains Marketplace plugin page.
The provided value will be set as a value of the `<vendor>` element.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.vendor.name`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-name)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.vendor.name`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-name)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
### vendorEmail
{#patchPluginXml-vendorEmail}
The vendor's email address.
The provided value will be set as a value of the `<vendor email="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.vendor.email`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-email)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.vendor.email`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-email)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
### vendorUrl
{#patchPluginXml-vendorUrl}
The link to the vendor's homepage.
The provided value will be set as a value of the `<vendor url="">` element attribute.
{style="narrow"}
Type
: `Property<String>`
Default value
: [`intellijPlatform.pluginConfiguration.vendor.url`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-url)
See also:
- [Extension: `intellijPlatform.pluginConfiguration.vendor.url`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-pluginConfiguration-vendor-url)
- [Plugin Configuration File: `vendor`](plugin_configuration_file.md#idea-plugin__vendor)
## prepareSandbox
{#prepareSandbox}
See also:
- [Extension: `intellijPlatform.sandboxContainer`](tools_intellij_platform_gradle_plugin_extension.md#intellijPlatform-sandboxContainer)
- [Task Awares: `SandboxAware`](tools_intellij_platform_gradle_plugin_task_awares.md#SandboxAware)
## printBundledPlugins
{#printBundledPlugins}
## printProductsReleases
{#printProductsReleases}
## publishPlugin
{#publishPlugin}
### archiveFile
{#publishPlugin-archiveFile}
### host
{#publishPlugin-host}
### token
{#publishPlugin-token}
### channels
{#publishPlugin-channels}
### hidden
{#publishPlugin-hidden}
### toolboxEnterprise
{#publishPlugin-toolboxEnterprise}
## runIdePerformanceTest
{#runIdePerformanceTest}
## runIde
{#runIde}
## setupDependencies
{#setupDependencies}
## signPlugin
{#signPlugin}
## testIde
{#testIde}
## testIdeUi
{#testIdeUi}
## verifyPluginProjectConfiguration
{#verifyPluginProjectConfiguration}
## verifyPluginSignature
{#verifyPluginSignature}
## verifyPluginStructure
{#verifyPluginStructure}
## verifyPlugin
{#verifyPlugin}
<include from="snippets.md" element-id="missingContent"/>