mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-30 18:27:49 +08:00
plugin_class_loaders.md: mention overriding IDE dependency (https://github.com/JetBrains/gradle-intellij-plugin/issues/656)
This commit is contained in:
parent
4652b63eaf
commit
41ff7cbefe
@ -5,12 +5,28 @@
|
||||
A separate class loader is used to load the classes of each plugin.
|
||||
This allows each plugin to use a different library version, even if the same library is used by the IDE itself or by another plugin.
|
||||
|
||||
## Overriding IDE Dependencies
|
||||
|
||||
Gradle 7 introduced `implementation` scope, replacing `compile` scope.
|
||||
For this setup to use project defined dependency instead of the bundled IDE version, please add this snippet to your <path>build.gradle.kts</path>:
|
||||
|
||||
```kotlin
|
||||
configurations {
|
||||
all {
|
||||
resolutionStrategy.sortArtifacts(ResolutionStrategy.SortOrder.DEPENDENCY_FIRST)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Classes from Plugin Dependencies
|
||||
|
||||
By default, the main IDE class loader loads classes that are not found in the plugin class loader.
|
||||
However, in the <path>plugin.xml</path> file, you may use the `<depends>` element to specify that a [plugin depends](plugin_dependencies.md) on one or more other plugins.
|
||||
In this case, the class loaders of those plugins will be used for classes not found in the current plugin.
|
||||
This allows a plugin to reference classes from other plugins.
|
||||
|
||||
### Using ServiceLoader
|
||||
## Using ServiceLoader
|
||||
|
||||
Some libraries use [`ServiceLoader`](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/ServiceLoader.html) to detect and load implementations.
|
||||
For this to work in a plugin, the context class loader must be set to the plugin's classloader and restored afterwards with original one around initialization code:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user