mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
dev_alternate_products.md: restructure for Gradle 1/2
This commit is contained in:
parent
1baa968607
commit
43f08f7338
@ -78,7 +78,7 @@ dependencies {
|
|||||||
|
|
||||||
{collapsible="true" default-state="collapsed"}
|
{collapsible="true" default-state="collapsed"}
|
||||||
|
|
||||||
The use-case of developing for a non-IntelliJ IDEA IDE is reviewed in the [Plugins Targeting Alternate IntelliJ Platform-Based IDEs](dev_alternate_products.md#configuring-gradle-build-script-to-target-products-other-than-intellij-idea) section.
|
The use-case of developing for a non-IntelliJ IDEA IDE is reviewed in the [Plugins Targeting Alternate IntelliJ Platform-Based IDEs](dev_alternate_products.md#gradle1) section.
|
||||||
The particular example in that section discusses configuring a plugin project for PhpStorm, so the details for an Android Studio plugin project are reviewed here.
|
The particular example in that section discusses configuring a plugin project for PhpStorm, so the details for an Android Studio plugin project are reviewed here.
|
||||||
|
|
||||||
Here are the steps to configure the Gradle build script for developing a plugin to target Android Studio:
|
Here are the steps to configure the Gradle build script for developing a plugin to target Android Studio:
|
||||||
|
@ -51,7 +51,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="Gradle IntelliJ Plugin (1.x)">
|
<tab title="Gradle IntelliJ Plugin (1.x)">
|
||||||
|
|
||||||
The configuration of CLion plugin projects follows the methods described in [Configuring Plugin Projects using a Product-Specific Attribute](dev_alternate_products.md#configuring-plugin-projects-using-a-product-specific-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
The configuration of CLion plugin projects follows the methods described in [Configuring Plugin Projects using a Product-Specific Attribute](dev_alternate_products.md#using-a-product-specific-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
||||||
|
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
||||||
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
||||||
|
@ -48,7 +48,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="Gradle IntelliJ Plugin (1.x)">
|
<tab title="Gradle IntelliJ Plugin (1.x)">
|
||||||
|
|
||||||
The configuration of DataGrip plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#configuring-plugin-projects-using-the-intellij-idea-product-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
The configuration of DataGrip plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#using-the-intellij-idea-product-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
||||||
|
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
||||||
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
||||||
|
@ -4,45 +4,49 @@
|
|||||||
|
|
||||||
<link-summary>Configuring plugin projects for targeting IntelliJ Platform-based IDEs other than IntelliJ IDEA.</link-summary>
|
<link-summary>Configuring plugin projects for targeting IntelliJ Platform-based IDEs other than IntelliJ IDEA.</link-summary>
|
||||||
|
|
||||||
<include from="creating_plugin_project.md" element-id="gradle1xOnly"/>
|
|
||||||
|
|
||||||
Plugin projects can target any (custom) IDEs, as long as the products are based on the [IntelliJ Platform](intellij_platform.md).
|
Plugin projects can target any (custom) IDEs, as long as the products are based on the [IntelliJ Platform](intellij_platform.md).
|
||||||
Such plugins are developed much like plugin projects that target IntelliJ IDEA.
|
Such plugins are developed much like plugin projects that target IntelliJ IDEA.
|
||||||
|
|
||||||
Project configuration attributes common to projects targeting products other than IntelliJ IDEA are described on this page.
|
|
||||||
Details particular to an IntelliJ Platform-based product are described on the individual product pages in _Product Specific_.
|
|
||||||
|
|
||||||
All the Gradle configuration attributes described here are discussed in-depth on the [](configuring_plugin_project.md) and the [](tools_gradle_intellij_plugin.md).
|
|
||||||
|
|
||||||
<include from="snippets.md" element-id="jetbrainsProductOpenSourceLicense"/>
|
<include from="snippets.md" element-id="jetbrainsProductOpenSourceLicense"/>
|
||||||
|
|
||||||
## Getting Started
|
Modifications are required to the project's Gradle build script and <path>[plugin.xml](plugin_configuration_file.md)</path> files, as described below
|
||||||
|
and on the individual product pages in _Product Specific_.
|
||||||
|
The Gradle build script is modified to specify the target product, determining the APIs available to the plugin.
|
||||||
|
The <path>plugin.xml</path> file is modified to declare the plugin's dependencies on plugins and modules.
|
||||||
|
|
||||||
|
## IntelliJ Platform Gradle Plugin (2.x)
|
||||||
|
|
||||||
|
A dependency on a specific IDE is defined in the Gradle build script using the builtin extensions listed in [](tools_intellij_platform_gradle_plugin_dependencies_extension.md#target-platforms).
|
||||||
|
Then, dependencies on required bundled modules and plugins must be defined in the <path>plugin.xml</path> file.
|
||||||
|
The necessary configuration for the corresponding product can be found under _Product Specific_ (for example, for [WebStorm](webstorm.md)).
|
||||||
|
|
||||||
|
See also [](plugin_compatibility.md).
|
||||||
|
|
||||||
|
## Gradle IntelliJ Plugin (1.x)
|
||||||
|
{id="gradle1"}
|
||||||
|
|
||||||
To create a new Gradle plugin project, follow the tutorial on the [](creating_plugin_project.md) page.
|
To create a new Gradle plugin project, follow the tutorial on the [](creating_plugin_project.md) page.
|
||||||
The tutorial produces a skeleton Gradle project suitable to use as a starting point.
|
The tutorial produces a skeleton Gradle project suitable to use as a starting point.
|
||||||
|
|
||||||
Modifications are needed to the skeleton project's Gradle build script and <path>[plugin.xml](plugin_configuration_file.md)</path> files, as described below, and on the individual product pages in _Product Specific_.
|
|
||||||
The Gradle build script is modified to specify the target product, determining the APIs available during development.
|
|
||||||
The <path>plugin.xml</path> file is modified to declare the plugin's dependencies on modules or libraries.
|
|
||||||
|
|
||||||
## Configuring Gradle Build Script to Target Products Other Than IntelliJ IDEA
|
|
||||||
|
|
||||||
The best practice is to use the [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property to specify the target product.
|
The best practice is to use the [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property to specify the target product.
|
||||||
For example, `PY` for PyCharm Professional.
|
For example, `PY` for PyCharm Professional.
|
||||||
Configuration using an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property is explained in the [](#configuring-plugin-projects-using-a-product-specific-attribute) section below.
|
Configuration using an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property is explained in the [](#using-a-product-specific-attribute) section below.
|
||||||
|
|
||||||
NOTE: Not all products have an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property defined by the [](tools_gradle_intellij_plugin.md), for example, [Android Studio](android_studio.md) and [PhpStorm](phpstorm.md).
|
NOTE: Not all products have an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property defined by the [](tools_gradle_intellij_plugin.md), for example, [Android Studio](android_studio.md) and [PhpStorm](phpstorm.md).
|
||||||
Please see their respective pages for configuration and
|
Please see their respective pages for configuration and
|
||||||
[](#configuring-gradle-build-script-using-the-intellij-idea-product-attribute) below.
|
[](#configuring-gradle-build-script-using-the-intellij-idea-product-attribute) below.
|
||||||
|
|
||||||
> To target multiple products (e.g., IntelliJ IDEA and PyCharm) with the same plugin, see [](plugin_compatibility.md) page.
|
All the Gradle configuration attributes described here are discussed in-depth on the [](configuring_plugin_project.md) and the [](tools_gradle_intellij_plugin.md).
|
||||||
|
|
||||||
|
> To target multiple products (for example, IntelliJ IDEA and PyCharm) with the same plugin, see [](plugin_compatibility.md) page.
|
||||||
>
|
>
|
||||||
{style="note"}
|
{style="note"}
|
||||||
|
|
||||||
### Configuring Plugin Projects Using a Product-Specific Attribute
|
### Using a Product-Specific Attribute
|
||||||
|
|
||||||
If the [](tools_gradle_intellij_plugin.md) supports a target product directly, there will be an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property defined.
|
If the [](tools_gradle_intellij_plugin.md) supports a target product directly, there will be an [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property defined.
|
||||||
Specifying the target as a product-specific [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property has two advantages:
|
Specifying the target as a product-specific [`intellij.type`](tools_gradle_intellij_plugin.md#intellij-extension-type) property has two advantages:
|
||||||
|
|
||||||
* The APIs available to the plugin will be limited to only what is defined in the target product
|
* The APIs available to the plugin will be limited to only what is defined in the target product
|
||||||
(unless additional plugin dependencies are specified).
|
(unless additional plugin dependencies are specified).
|
||||||
* The default [](ide_development_instance.md) for running the plugin will be the target product.
|
* The default [](ide_development_instance.md) for running the plugin will be the target product.
|
||||||
@ -74,7 +78,7 @@ intellij {
|
|||||||
</tab>
|
</tab>
|
||||||
</tabs>
|
</tabs>
|
||||||
|
|
||||||
### Configuring Plugin Projects Using the IntelliJ IDEA Product Attribute
|
### Using the IntelliJ IDEA Product Attribute
|
||||||
|
|
||||||
If the [](tools_gradle_intellij_plugin.md) does not directly support an IntelliJ Platform-based product, the Gradle build script can still be configured to target the desired product.
|
If the [](tools_gradle_intellij_plugin.md) does not directly support an IntelliJ Platform-based product, the Gradle build script can still be configured to target the desired product.
|
||||||
In this case, the build script is configured to use IntelliJ IDEA (Community or Ultimate Edition) as the basis for the available APIs.
|
In this case, the build script is configured to use IntelliJ IDEA (Community or Ultimate Edition) as the basis for the available APIs.
|
||||||
@ -83,6 +87,7 @@ However, testing the plugin project in the target product itself helps to find s
|
|||||||
|
|
||||||
Additional configuration must be done to match the version of IntelliJ IDEA to the version of the target product.
|
Additional configuration must be done to match the version of IntelliJ IDEA to the version of the target product.
|
||||||
Understanding the relationship between build numbers is critical when using this approach to project configuration:
|
Understanding the relationship between build numbers is critical when using this approach to project configuration:
|
||||||
|
|
||||||
* _targetIDE_ is the (version-specific) IntelliJ Platform-based IDE in which the plugin is intended to run, such as Android Studio or PhpStorm.
|
* _targetIDE_ is the (version-specific) IntelliJ Platform-based IDE in which the plugin is intended to run, such as Android Studio or PhpStorm.
|
||||||
* _baseIntelliJPlatformVersion_ is the (version-specific) IntelliJ Platform used in the build of the _targetIDE_.
|
* _baseIntelliJPlatformVersion_ is the (version-specific) IntelliJ Platform used in the build of the _targetIDE_.
|
||||||
The IntelliJ Platform is defined by a specific build of the IntelliJ IDEA Community Edition.
|
The IntelliJ Platform is defined by a specific build of the IntelliJ IDEA Community Edition.
|
||||||
@ -109,6 +114,7 @@ Additional ways include hovering over the version number for a product in [Toolb
|
|||||||
In this example, IntelliJ IDEA Community Edition (which defines the IntelliJ Platform) for `2019.2.4` is build number `192.7142.36`.
|
In this example, IntelliJ IDEA Community Edition (which defines the IntelliJ Platform) for `2019.2.4` is build number `192.7142.36`.
|
||||||
Although the *FIX* versions are different, this is not uncommon between products, and the builds are still compatible.
|
Although the *FIX* versions are different, this is not uncommon between products, and the builds are still compatible.
|
||||||
The *BRANCH* and *BUILD* numbers match, therefore in this PhpStorm example:
|
The *BRANCH* and *BUILD* numbers match, therefore in this PhpStorm example:
|
||||||
|
|
||||||
* The _targetIDE_ is PhpStorm, build `192.7142.41`,
|
* The _targetIDE_ is PhpStorm, build `192.7142.41`,
|
||||||
* The _baseIntelliJPlatformVersion_ (IntelliJ IDEA Community Edition) is build `192.7142.36`
|
* The _baseIntelliJPlatformVersion_ (IntelliJ IDEA Community Edition) is build `192.7142.36`
|
||||||
|
|
||||||
@ -184,7 +190,7 @@ runIde {
|
|||||||
</tab>
|
</tab>
|
||||||
</tabs>
|
</tabs>
|
||||||
|
|
||||||
## Configuring plugin.xml
|
### Configuring plugin.xml
|
||||||
|
|
||||||
As discussed on the [](plugin_compatibility.md#declaring-plugin-dependencies) page of this guide, a plugin's dependency on [](plugin_compatibility.md#modules-specific-to-functionality) must be declared in <path>plugin.xml</path>.
|
As discussed on the [](plugin_compatibility.md#declaring-plugin-dependencies) page of this guide, a plugin's dependency on [](plugin_compatibility.md#modules-specific-to-functionality) must be declared in <path>plugin.xml</path>.
|
||||||
When using features (APIs) specific to the target product, a dependency on the target product module must be declared, as shown in the code snippet below.
|
When using features (APIs) specific to the target product, a dependency on the target product module must be declared, as shown in the code snippet below.
|
||||||
|
@ -50,7 +50,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="GoLand IDE">
|
<tab title="GoLand IDE">
|
||||||
|
|
||||||
The configuration of targeting GoLand IDE follows the methods described in [Configuring Plugin Projects Using a Product-Specific Attribute](dev_alternate_products.md#configuring-plugin-projects-using-a-product-specific-attribute).
|
The configuration of targeting GoLand IDE follows the methods described in [Configuring Plugin Projects Using a Product-Specific Attribute](dev_alternate_products.md#using-a-product-specific-attribute).
|
||||||
|
|
||||||
Starting with 2020.2, it's possible to configure `GO` for `intellij.type` in the Gradle build script.
|
Starting with 2020.2, it's possible to configure `GO` for `intellij.type` in the Gradle build script.
|
||||||
If you need to use Go language APIs, specifying the `GO` platform type is not enough - it is required to add a dependency to the `org.jetbrains.plugins.go` plugin.
|
If you need to use Go language APIs, specifying the `GO` platform type is not enough - it is required to add a dependency to the `org.jetbrains.plugins.go` plugin.
|
||||||
@ -88,7 +88,7 @@ intellij {
|
|||||||
|
|
||||||
<tab title="Using Plugin">
|
<tab title="Using Plugin">
|
||||||
|
|
||||||
The configuration of GoLand plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#configuring-plugin-projects-using-the-intellij-idea-product-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
The configuration of GoLand plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#using-the-intellij-idea-product-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
||||||
|
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
||||||
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
||||||
|
@ -45,7 +45,7 @@ dependencies {
|
|||||||
</tab>
|
</tab>
|
||||||
<tab title="Gradle IntelliJ Plugin (1.x)">
|
<tab title="Gradle IntelliJ Plugin (1.x)">
|
||||||
|
|
||||||
The configuration of IntelliJ IDEA plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#configuring-plugin-projects-using-the-intellij-idea-product-attribute).
|
The configuration of IntelliJ IDEA plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#using-the-intellij-idea-product-attribute).
|
||||||
|
|
||||||
| `gradle-intellij-plugin` Attribute | Attribute Value |
|
| `gradle-intellij-plugin` Attribute | Attribute Value |
|
||||||
|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
|
|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
|
||||||
|
@ -59,7 +59,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="PhpStorm IDE">
|
<tab title="PhpStorm IDE">
|
||||||
|
|
||||||
The configuration of targeting PhpStorm IDE follows the methods described in [Configuring Plugin Projects Using a Product-Specific Attribute](dev_alternate_products.md#configuring-plugin-projects-using-a-product-specific-attribute).
|
The configuration of targeting PhpStorm IDE follows the methods described in [Configuring Plugin Projects Using a Product-Specific Attribute](dev_alternate_products.md#using-a-product-specific-attribute).
|
||||||
|
|
||||||
The possibility of configuring the `PS` IntelliJ Platform type was introduced in [](tools_gradle_intellij_plugin.md) 1.8.0.
|
The possibility of configuring the `PS` IntelliJ Platform type was introduced in [](tools_gradle_intellij_plugin.md) 1.8.0.
|
||||||
Only the versions of PhpStorm 2022.2 and newer are supported.
|
Only the versions of PhpStorm 2022.2 and newer are supported.
|
||||||
@ -81,7 +81,7 @@ The IntelliJ IDEA Ultimate Edition (with the PHP plugin) must be used for develo
|
|||||||
However, this IntelliJ IDEA Ultimate configuration runs the risk of accidentally using some APIs that are not available in PhpStorm.
|
However, this IntelliJ IDEA Ultimate configuration runs the risk of accidentally using some APIs that are not available in PhpStorm.
|
||||||
The recommended best practice is to use PhpStorm for testing.
|
The recommended best practice is to use PhpStorm for testing.
|
||||||
|
|
||||||
Configuration of a Gradle-based PhpStorm plugin project is used as a tutorial in the section [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#configuring-plugin-projects-using-the-intellij-idea-product-attribute).
|
Configuration of a Gradle-based PhpStorm plugin project is used as a tutorial in the section [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#using-the-intellij-idea-product-attribute).
|
||||||
Many techniques are discussed, such as choosing a version of IntelliJ IDEA Ultimate given a targeted version of PhpStorm.
|
Many techniques are discussed, such as choosing a version of IntelliJ IDEA Ultimate given a targeted version of PhpStorm.
|
||||||
|
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
||||||
|
@ -47,7 +47,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="Gradle IntelliJ Plugin (1.x)">
|
<tab title="Gradle IntelliJ Plugin (1.x)">
|
||||||
|
|
||||||
The configuration of PyCharm plugin projects follows the methods described in [Configuring Plugin Projects using a Product-Specific Attribute](dev_alternate_products.md#configuring-plugin-projects-using-a-product-specific-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
The configuration of PyCharm plugin projects follows the methods described in [Configuring Plugin Projects using a Product-Specific Attribute](dev_alternate_products.md#using-a-product-specific-attribute), and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml).
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the Gradle build script.
|
||||||
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ dependencies {
|
|||||||
|
|
||||||
<tab title="Gradle IntelliJ Plugin (1.x)">
|
<tab title="Gradle IntelliJ Plugin (1.x)">
|
||||||
|
|
||||||
The configuration of WebStorm plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#configuring-plugin-projects-using-the-intellij-idea-product-attribute) and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml) for PhpStorm.
|
The configuration of WebStorm plugin projects follows the methods described in [Configuring Plugin Projects using the IntelliJ IDEA Product Attribute](dev_alternate_products.md#using-the-intellij-idea-product-attribute) and [Configuring the plugin.xml File](dev_alternate_products.md#configuring-pluginxml) for PhpStorm.
|
||||||
|
|
||||||
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
The table below summarizes the [](tools_gradle_intellij_plugin.md) attributes to set in the plugin project's Gradle build script.
|
||||||
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
Click on an entry in the table's *Attribute* column to go to the documentation about that attribute.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user