I finally figured it out, I believe. The Gradle intellij-plugin-plugin updated the `since-build` setting. Setting `updateSinceUntilBuild` to false solved it. It's not super-obvious behaviour to by default silently change a configured value, IMO.
> It's not super-obvious behaviour to by default silently change a configured value, IMO.
It's stated in the documentation. Default setup provides the best options to start with. Manually setting since/until build number or using `updateSinceUntilBuild` is a brittle way to do things.
If you're sure you need this, I suppose you are not a newbie in developing plugins for IntelliJ and ready to read the documentation carefully.
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> <idea-version since-build="173.0" /> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html on how to target different products --> <depends>com.intellij.modules.lang</depends> <depends>com.intellij.modules.platform</depends> <depends>com.intellij.modules.java</depends>
<extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions>
<actions> <!-- Add your actions here --> <group id="MobiusPlugin.NewMenu" text="Greeting" description="Greeting menu"> <add-to-group anchor="last" group-id="NewGroup" /> <action id="MobiusPlugin.GenerateScaffolding" class="REDACTED" text="Mobius Feature" icon="/icons/mobius.png" description="Generates scaffolding for a new Mobius feature"/> </group> </actions> </idea-plugin>
This is happening on Android Studio 3.1.2 (build 173.4720617) and IDEA 2018.1.3 (build 181.something). I've tried using the following since-versions:
I've also tried uncommenting the depends sections and adding an until-version.
It would be great if the IDE could state *what* is making the plugin incompatible with the installation (e.g., "Required build range X-Y, installation is Z"). I've spent hours on trying to figure out what is making this not work. Would be very grateful for some help!
sinceBuild by default is set to IDEA that you use for compiling. Only this approach may provide a guarantee that your plugin will be binary compatible with an IDE.
Hm, can you elaborate on why setting a 'since-build' is brittle? I'm using IDEA to develop a plugin for use in both Android Studio and IDEA and they tend to be quite out of synch. Is the reason that with a newer version of IDEA, you might be using backwards-incompatible APIs when testing? If so, I'd appreciate any advice you might have as how to handle supporting backwards and forwards compatibility for that use case.
You use IDEA 2018.3.1 (181 branch) for compiling and run the plugin on Android Studio 3.1.2 (173 branch). There are plenty of changes between them, including changes in API. The compiler won't say you about a missing class or method (because they present in 181) that you used but you'll get an exception on runtime in Android Studio. This is example of brittleness.
> I'm using IDEA to develop a plugin for use in both Android Studio and IDEA and they tend to be quite out of synch.
If they were, you didn't get the compatibility error :) Android Studio usually is based on an old IntelliJ branch. You can use IntelliJ 2017.3 for compiling, It will match Android Studio sources more but not entirely too.
> Is the reason that with a newer version of IDEA, you might be using backward-incompatible APIs when testing?
But we're not really trying to keep forward compatibility and allow plugins built against 2018.1 run on 2017.3.
> If so, I'd appreciate any advice you might have as how to handle supporting backwards and forwards compatibility for that use case.
Usually, we build different plugins against different IDE version. E.g. on `master` branch we use `intellij.version = 2018.1.3` and on 173 branch we use `intellij.version = 2017.3.5`, and publish all of them.
> Better feedback on version mismatch (so stating "plugin supports range X to Y, I am Z" when failing to load the plugin instead of the current message)
I took a look at the code and looks like IDE already logs the reason of incompatibility in this way. Please check out `build/idea-sandbox/system/logs/idea.log. Does it contain something a warning about the plugin not loaded?
> A warning message when the Gradle plugin overrides the configured value in plugin.xml.
INFO - llij.ide.plugins.PluginManager - Plugin 'Plugin helping generate Mobius templates' can't be loaded because: Plugin since-build or until-build don't match this product's build number
Which wasn't enough to help me. In IntelliJ I was mostly using the 'Load plugin from disk' option, and I haven't seen anything in the logs from that, only a popup which had a similar message, without details on the ranges or the failure.
I had read that page several times without seeing the section about API compatibility, possibly because it was under the 'Optional dependencies' section which I skipped as I wasn't using that. Proposed an update.
> INFO - llij.ide.plugins.PluginManager - Plugin 'Plugin helping generate Mobius templates' can't be loaded because: Plugin since-build or until-build don't match this product's build number
Not this one, there should be warning (not info) with "not loaded" words
I see, you're trying to install built distribution of a plugin. These logs are shown when you installed the plugin and run the ide.
I filed the issue (https://youtrack.jetbrains.com/issue/IDEA-192126). Still, it's much more convenient to run/debug plugin directly in Android Studio, e.g. by using alternativeIdePath option (see the documentation for details). And such setup will produce desired logs.
Thanks for the alternativeIdePath suggestion - I was just using the build.gradle file from the wizard as described in https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html, and there were no issues when running the plugin in the sandbox (using the `runIde` gradle task). IIRC, the generated build.gradle file suggested version '2017.1.3', but I'm not sure. When running the tests on the sandbox (specifying 2017.3.5 which I took from another in-house plugin), I do seem to be getting the older version:
IntelliJ IDEA 2017.3.5 (Community Edition) Build #IC-173.4674.33, built on March 5, 2018 JRE: 1.8.0_152-release-1024-b15 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Mac OS X 10.13.4
That build number matches the one I get when allowing the gradle plugin to set the since and until build:
I only started having problems when I wanted to verify the packaged plugin. One thing I think is a bit odd is that my AS has the following version info:
Android Studio 3.1.2 Build #AI-173.4720617, built on April 13, 2018 JRE: 1.8.0_152-release-1024-b01 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Mac OS X 10.13.4
It seems to me like 4720617 is a lot bigger than 4674, so not sure how the version range checking works?
> If you're sure you need this, I suppose you are not a newbie in developing plugins for IntelliJ and ready to read the documentation carefully.
To me, this is a fair assumption on changing things like `since-build`. There is often `Advanced` button in application settings, you don't consider this rude, right? But changing something there is supposed that you know what you're doing. Same here, if you found that attributes and decided to use them, it's likely not your first plugin and you understand what you're doing.
The gradle-intellij-plugin default is super-fit for quick start. If you want to go further like setting `since-build =" 131 "` (which I'd not recommend) you'd better read the documentation first. Probably even suggest a change to make it clearer in the plugin itself. If you think that calling me rude is better decision, I'm ok with that, but still I find it's rude and senseless.
I would expect Jetbrains staff to be polite, friendly, and helpful; indeed, they usually are.
It's not right to make judgements on the ability of those seeking help. It can be debated whether someone "should" know something or not - that's not the point I am making at all.
You are clearly admonishing someone for not reading the documentation - rather than simply helping, or, even better, accepting that it might just not have been clear enough in the documentation, the build logs, or the error message.
For instance, the error log could well say "This plugin declares compatibility since build nnnn, and therefore cannot be installed".
To me, it looks like you haven't read the whole thread. What're you trying to achieve here by blaming me for my comments taken out of the context? Is this what you call seeking for the help?
> For instance, the error log could well say "This plugin declares compatibility since build nnnn, and therefore cannot be installed".
There's two issues here - the actual question at hand, and the manner in which it might be politely and helpfully answered.
To go back to the first one, you've posted images yet again showing that a pesky Jetbrains customer/developer is yet again WRONG. You haven't stopped for a second to consider, just maybe, I'm not seeing those thing. You've just wanted to prove a point.
So - here IS what I'm seeing:
When building
> Task :buildSearchableOptions WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.intellij.ide.IdeEventQueue to constructor sun.awt.PostEventQueue(java.awt.EventQueue) WARNING: Please consider reporting this to the maintainers of com.intellij.ide.IdeEventQueue WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release Starting searchable options index builder 2020-05-21 10:29:17,566 [ 1340] WARN - ConfigurableExtensionPointUtil - ignore deprecated groupId: language for id: preferences.language.Kotlin.scripting Searchable options index builder completed
While that's building in my console, I see it rewriting the current line. So perhaps the patching log you mentioned is in there? Or perhaps I've just done something dumb, or I've missed something in the manual.
What I see in the IntelliJ logs when I attempt to install the plugin:
2020-05-21 10:31:24,192 [87986453] INFO - ateSettings.impl.UpdateChecker - failed to load plugin descriptions from : Malformed URL:
Nothing at all about build ranges.
Finally - here's the popup I see in the UI
Again - nothing about *why* it's incompatible.
To the second point - you seem to again trying to argue that you've not been rude by... being rude.
Again - you've tried your best to contradict me and say I'm wrong.
Which one? You've never described it, only blaming me.
> You've just wanted to prove a point.
Not really, I don't have any point to prove here. You asked to add logs, I've shown you they are already there. Any other suggestions are still welcome.
> > Task :buildSearchableOptions
> 2020-05-21 10:31:24,192 [87986453] INFO - ateSettings.impl.UpdateChecker - failed to load plugin descriptions from : Malformed URL:
Both seem unrelated.
> Finally - here's the popup I see in the UI
Not sure how you've got it.
> To the second point - you seem to again trying to argue that you've not been rude by... being rude.
And you're saying me that I'm rude by being rude, looks like we're soulmates.
I still don't understand what do you want from me. If you want to blame me for something, I stop this conversation.
If you're seeking for the help, ask for it and provide details of the actual problem:
- describe the problem you faced
- describe exact steps to reproduce it. If it was installing from disk, please describe the scenario of using it and how it's related to `gradle-intellij-plugin` or plugin development process.
I finally figured it out, I believe. The Gradle intellij-plugin-plugin updated the `since-build` setting. Setting `updateSinceUntilBuild` to false solved it. It's not super-obvious behaviour to by default silently change a configured value, IMO.
> It's not super-obvious behaviour to by default silently change a configured value, IMO.
It's stated in the documentation. Default setup provides the best options to start with. Manually setting since/until build number or using `updateSinceUntilBuild` is a brittle way to do things.
If you're sure you need this, I suppose you are not a newbie in developing plugins for IntelliJ and ready to read the documentation carefully.
Right, thank you. Fast and accurate answer as always from JetBrains support. :)
If I could request some things that would have made my life easier related to this question, it would be:
Post your plugin.xml and IDE About information.
found this
plugin.xml:
<idea-version since-build="131"/>
the plugin is written in (should be compatible with?) IU-171 (latest)
gradle:
Provide the complete xml.
thanks to Serge Baranov and Alexander Zolotov, this issue is resolved.
here are working build.gradle config files.
questions about these config files are welcome
I tried applying the plugin working for android studio 2.2.3 to 3.0.1 and got the same issue
What change you did in build.gradle config files to resolve this issue?
@Agarawal, sorry the information you provided is not enough to help you. Please read the plugin documentation and build range documentation. Likely, you'll find the answer there.
I'm getting this same error, with the following plugin.xml:
This is happening on Android Studio 3.1.2 (build 173.4720617) and IDEA 2018.1.3 (build 181.something). I've tried using the following since-versions:
- 162, 162.0, 173, 173.somethingthatwasautogeneratedsomehow
I've also tried uncommenting the depends sections and adding an until-version.
It would be great if the IDE could state *what* is making the plugin incompatible with the installation (e.g., "Required build range X-Y, installation is Z"). I've spent hours on trying to figure out what is making this not work. Would be very grateful for some help!
sinceBuild by default is set to IDEA that you use for compiling. Only this approach may provide a guarantee that your plugin will be binary compatible with an IDE.
For customizing since/until build numbers, which are not recommended, see the documentation for patching plugin.xml: https://github.com/JetBrains/gradle-intellij-plugin/blob/master/README.md#patching-dsl
Hm, can you elaborate on why setting a 'since-build' is brittle? I'm using IDEA to develop a plugin for use in both Android Studio and IDEA and they tend to be quite out of synch. Is the reason that with a newer version of IDEA, you might be using backwards-incompatible APIs when testing? If so, I'd appreciate any advice you might have as how to handle supporting backwards and forwards compatibility for that use case.
You use IDEA 2018.3.1 (181 branch) for compiling and run the plugin on Android Studio 3.1.2 (173 branch). There are plenty of changes between them, including changes in API. The compiler won't say you about a missing class or method (because they present in 181) that you used but you'll get an exception on runtime in Android Studio. This is example of brittleness.
> I'm using IDEA to develop a plugin for use in both Android Studio and IDEA and they tend to be quite out of synch.
If they were, you didn't get the compatibility error :) Android Studio usually is based on an old IntelliJ branch. You can use IntelliJ 2017.3 for compiling, It will match Android Studio sources more but not entirely too.
> Is the reason that with a newer version of IDEA, you might be using backward-incompatible APIs when testing?
We're trying to make changes backward-compatible, so plugin built for 173 branch will work on 181-branch runtime (sometimes we fail though: http://www.jetbrains.org/intellij/sdk/docs/reference_guide/api_changes_list.html).
But we're not really trying to keep forward compatibility and allow plugins built against 2018.1 run on 2017.3.
> If so, I'd appreciate any advice you might have as how to handle supporting backwards and forwards compatibility for that use case.
Usually, we build different plugins against different IDE version. E.g. on `master` branch we use `intellij.version = 2018.1.3` and on 173 branch we use `intellij.version = 2017.3.5`, and publish all of them.
> Better feedback on version mismatch (so stating "plugin supports range X to Y, I am Z" when failing to load the plugin instead of the current message)
I took a look at the code and looks like IDE already logs the reason of incompatibility in this way. Please check out `build/idea-sandbox/system/logs/idea.log. Does it contain something a warning about the plugin not loaded?
> A warning message when the Gradle plugin overrides the configured value in plugin.xml.
It makes sense, indeed. Will do. https://github.com/JetBrains/gradle-intellij-plugin/issues/284
> A clarification in official documentation about the things you just mentioned regarding API compatibility
We have a dedicated page about compatibility with a link to API breakage page: https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html.
Not sure what to add there. If you have ideas, feel free to make a pull request (Edit page button on the top of the page).
The message I'm getting (from AS in this case) is
INFO - llij.ide.plugins.PluginManager - Plugin 'Plugin helping generate Mobius templates' can't be loaded because: Plugin since-build or until-build don't match this product's build number
Which wasn't enough to help me. In IntelliJ I was mostly using the 'Load plugin from disk' option, and I haven't seen anything in the logs from that, only a popup which had a similar message, without details on the ranges or the failure.
I had read that page several times without seeing the section about API compatibility, possibly because it was under the 'Optional dependencies' section which I skipped as I wasn't using that. Proposed an update.
> INFO - llij.ide.plugins.PluginManager - Plugin 'Plugin helping generate Mobius templates' can't be loaded because: Plugin since-build or until-build don't match this product's build number
Not this one, there should be warning (not info) with "not loaded" words
Nothing like that in the logs for either IDEA or AS, tried commands like
grep WARN ~/Library/Logs/AndroidStudio3.1/idea.log* | grep -i loaded
grep WARN ~/Library/Logs/IntelliJIdea2018.1/idea.log* | grep -i plugin
grep -i "not loaded" ~/Library/Logs/AndroidStudio3.1/idea.log*
So I guess I'm on some older version, though the IntelliJ build is only 8 days old?
I see, you're trying to install built distribution of a plugin. These logs are shown when you installed the plugin and run the ide.
I filed the issue (https://youtrack.jetbrains.com/issue/IDEA-192126). Still, it's much more convenient to run/debug plugin directly in Android Studio, e.g. by using alternativeIdePath option (see the documentation for details). And such setup will produce desired logs.
Thanks for the alternativeIdePath suggestion - I was just using the build.gradle file from the wizard as described in https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html, and there were no issues when running the plugin in the sandbox (using the `runIde` gradle task). IIRC, the generated build.gradle file suggested version '2017.1.3', but I'm not sure. When running the tests on the sandbox (specifying 2017.3.5 which I took from another in-house plugin), I do seem to be getting the older version:
IntelliJ IDEA 2017.3.5 (Community Edition)
Build #IC-173.4674.33, built on March 5, 2018
JRE: 1.8.0_152-release-1024-b15 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.4
That build number matches the one I get when allowing the gradle plugin to set the since and until build:
<idea-version since-build="173.4674" until-build="173.*"/>
I only started having problems when I wanted to verify the packaged plugin. One thing I think is a bit odd is that my AS has the following version info:
Android Studio 3.1.2
Build #AI-173.4720617, built on April 13, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13.4
It seems to me like 4720617 is a lot bigger than 4674, so not sure how the version range checking works?
Should work since 173.4674 < 173.4720617 < 173.*
> I only started having problems when I wanted to verify the packaged plugin.
You may want to check the actual `plugin.xml` inside built plugin distribution.
This is not at all obvious.
The worst aspect is to see Alexander Zolotov be quite rude to a customer about it.
@Marcos I find your remark quite rude
In case it's not clear, I am referring to:
"I suppose you are not a newbie in developing plugins for IntelliJ and ready to read the documentation carefully."
I honestly gasped when I read something so sarcastic.
It's entirely un-obvious from the error messages and build logs.
> If you're sure you need this, I suppose you are not a newbie in developing plugins for IntelliJ and ready to read the documentation carefully.
To me, this is a fair assumption on changing things like `since-build`. There is often `Advanced` button in application settings, you don't consider this rude, right? But changing something there is supposed that you know what you're doing. Same here, if you found that attributes and decided to use them, it's likely not your first plugin and you understand what you're doing.
The gradle-intellij-plugin default is super-fit for quick start. If you want to go further like setting `since-build =" 131 "` (which I'd not recommend) you'd better read the documentation first. Probably even suggest a change to make it clearer in the plugin itself. If you think that calling me rude is better decision, I'm ok with that, but still I find it's rude and senseless.
I would expect Jetbrains staff to be polite, friendly, and helpful; indeed, they usually are.
It's not right to make judgements on the ability of those seeking help. It can be debated whether someone "should" know something or not - that's not the point I am making at all.
You are clearly admonishing someone for not reading the documentation - rather than simply helping, or, even better, accepting that it might just not have been clear enough in the documentation, the build logs, or the error message.
For instance, the error log could well say "This plugin declares compatibility since build nnnn, and therefore cannot be installed".
To me, it looks like you haven't read the whole thread. What're you trying to achieve here by blaming me for my comments taken out of the context? Is this what you call seeking for the help?
> For instance, the error log could well say "This plugin declares compatibility since build nnnn, and therefore cannot be installed".
There's two issues here - the actual question at hand, and the manner in which it might be politely and helpfully answered.
To go back to the first one, you've posted images yet again showing that a pesky Jetbrains customer/developer is yet again WRONG. You haven't stopped for a second to consider, just maybe, I'm not seeing those thing. You've just wanted to prove a point.
So - here IS what I'm seeing:
When building
> Task :buildSearchableOptions
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.intellij.ide.IdeEventQueue to constructor sun.awt.PostEventQueue(java.awt.EventQueue)
WARNING: Please consider reporting this to the maintainers of com.intellij.ide.IdeEventQueue
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Starting searchable options index builder
2020-05-21 10:29:17,566 [ 1340] WARN - ConfigurableExtensionPointUtil - ignore deprecated groupId: language for id: preferences.language.Kotlin.scripting
Searchable options index builder completed
BUILD SUCCESSFUL in 11s
10 actionable tasks: 2 executed, 8 up-to-date
While that's building in my console, I see it rewriting the current line. So perhaps the patching log you mentioned is in there? Or perhaps I've just done something dumb, or I've missed something in the manual.
What I see in the IntelliJ logs when I attempt to install the plugin:
2020-05-21 10:31:24,192 [87986453] INFO - ateSettings.impl.UpdateChecker - failed to load plugin descriptions from : Malformed URL:
Nothing at all about build ranges.
Finally - here's the popup I see in the UI
Again - nothing about *why* it's incompatible.
To the second point - you seem to again trying to argue that you've not been rude by... being rude.
Again - you've tried your best to contradict me and say I'm wrong.
> the actual question at hand
Which one? You've never described it, only blaming me.
> You've just wanted to prove a point.
Not really, I don't have any point to prove here. You asked to add logs, I've shown you they are already there. Any other suggestions are still welcome.
> > Task :buildSearchableOptions
> 2020-05-21 10:31:24,192 [87986453] INFO - ateSettings.impl.UpdateChecker - failed to load plugin descriptions from : Malformed URL:
Both seem unrelated.
> Finally - here's the popup I see in the UI
Not sure how you've got it.
> To the second point - you seem to again trying to argue that you've not been rude by... being rude.
And you're saying me that I'm rude by being rude, looks like we're soulmates.
I still don't understand what do you want from me. If you want to blame me for something, I stop this conversation.
If you're seeking for the help, ask for it and provide details of the actual problem:
- describe the problem you faced
- describe exact steps to reproduce it. If it was installing from disk, please describe the scenario of using it and how it's related to `gradle-intellij-plugin` or plugin development process.
I found this page while Googling the issue I faced. I subsequently resolved it by updating the IntelliJ version in my build.gradle file:
I simply came here to call out what I considered was an unhelpful attitude in the hope of it being modified, but clearly that's not going to happen.
I'm not seeking help - nor would I feel welcome to in future.
You may find this theory helpful in your approach in future: https://en.wikipedia.org/wiki/Theory_of_mind