Vladimir Sitnikov
08/05/2025, 8:30 AMjava.lang.NoClassDefFoundError: org/gradle/util/VersionNumber
Well, Gradle had VersionNumber
class for quite some time, and it is sad Gradle 9 broke backward compatibility with plugins which still use VersionNumber
from org.gradle.util
I wonder what are the benefits for Gradle to drop the class. My guess is it does not require much efforts to support.
It would be so much better if Gradle used something like @Deprecated(level=Hidden)
instead of dropping the class.Martin
08/05/2025, 8:35 AMlevel=Hidden
doesn't work for Java callers.Vladimir Sitnikov
08/05/2025, 8:35 AMMartin
08/05/2025, 8:36 AMMartin
08/05/2025, 8:38 AMAndrey Mishchenko
08/05/2025, 8:39 AMVladimir Sitnikov
08/05/2025, 8:39 AMVersionNumber
?Andrey Mishchenko
08/05/2025, 8:40 AMMartin
08/05/2025, 8:41 AMLike can you declare a Java class method "hidden"?For the record, it uses
synthetic
tilMartin
08/05/2025, 8:43 AMVladimir Sitnikov
08/05/2025, 8:43 AMAndrey Mishchenko
08/05/2025, 8:43 AMAndrey Mishchenko
08/05/2025, 8:44 AMVladimir Sitnikov
08/05/2025, 8:44 AMAndrey Mishchenko
08/05/2025, 8:44 AMAndrey Mishchenko
08/05/2025, 8:44 AMVladimir Sitnikov
08/05/2025, 8:45 AMAndrey Mishchenko
08/05/2025, 8:45 AMAndrey Mishchenko
08/05/2025, 8:46 AMVladimir Sitnikov
08/05/2025, 8:46 AMAndrey Mishchenko
08/05/2025, 8:47 AMAndrey Mishchenko
08/05/2025, 8:48 AMVladimir Sitnikov
08/05/2025, 8:50 AMAndrey Mishchenko
08/05/2025, 8:55 AMAndrey Mishchenko
08/05/2025, 8:55 AMAndrey Mishchenko
08/05/2025, 8:55 AMVladimir Sitnikov
08/05/2025, 8:55 AMAndrey Mishchenko
08/05/2025, 8:56 AMVladimir Sitnikov
08/05/2025, 8:56 AMVersionNumber
Andrey Mishchenko
08/05/2025, 8:56 AMVladimir Sitnikov
08/05/2025, 8:56 AMAndrey Mishchenko
08/05/2025, 8:56 AMVladimir Sitnikov
08/05/2025, 8:57 AMAndrey Mishchenko
08/05/2025, 8:57 AMVladimir Sitnikov
08/05/2025, 8:57 AMAndrey Mishchenko
08/05/2025, 8:57 AMVladimir Sitnikov
08/05/2025, 8:58 AMAndrey Mishchenko
08/05/2025, 8:58 AMMartin
08/05/2025, 8:59 AMAndrey Mishchenko
08/05/2025, 8:59 AMAndrey Mishchenko
08/05/2025, 8:59 AMAndrey Mishchenko
08/05/2025, 9:00 AMVladimir Sitnikov
08/05/2025, 9:01 AMVladimir Sitnikov
08/05/2025, 9:03 AMAndrey Mishchenko
08/05/2025, 9:06 AMAndrey Mishchenko
08/05/2025, 9:07 AMAndrey Mishchenko
08/05/2025, 9:07 AMVladimir Sitnikov
08/05/2025, 9:17 AMDeprecated(level=Hidden)
. Have you seen the suggestion above?
It would prevent new usages while it would keep backward compatibility at the same timeAndrey Mishchenko
08/05/2025, 9:19 AMVampire
08/05/2025, 9:19 AMAndrey Mishchenko
08/05/2025, 9:19 AMVladimir Sitnikov
08/05/2025, 9:20 AMsynthetic
at the bytecode level with Java just fineVampire
08/05/2025, 9:20 AMVladimir Sitnikov
08/05/2025, 9:20 AMVampire
08/05/2025, 9:20 AMVampire
08/05/2025, 9:21 AMVladimir Sitnikov
08/05/2025, 9:21 AMVampire
08/05/2025, 9:21 AMAndrey Mishchenko
08/05/2025, 9:21 AMVladimir Sitnikov
08/05/2025, 9:23 AMjsr
bytecode instruction in Java 1.6, yet Java still executes existing Java 1.5 classes that still use jsr
instructionAndrey Mishchenko
08/05/2025, 9:23 AMVampire
08/05/2025, 9:24 AMAndrey Mishchenko
08/05/2025, 9:24 AMVampire
08/05/2025, 9:24 AMVampire
08/05/2025, 9:24 AMAndrey Mishchenko
08/05/2025, 9:24 AMAndrey Mishchenko
08/05/2025, 9:24 AMVladimir Sitnikov
08/05/2025, 9:25 AMI just for fixing it, not supporting previous mistakesJava handled
jsr
removal much better than Gradle did with its org.gradle.util
Vampire
08/05/2025, 9:25 AMVladimir Sitnikov
08/05/2025, 10:03 AMVersionNumber
and ConfigureUtil
does help: https://github.com/pgjdbc/pgjdbc/pull/3752
I copied the classes under build-logic
, and it works.
Unfortunately it breaks with Groovy doing some Groovy things:
groovy.lang.MissingMethodException: No signature of method: groovy.xml.MarkupBuilder.setOmitNullAttributes() is applicable for argument types: (Boolean) values: [true]
Possible solutions: setOmitNullAttributes(boolean), isOmitNullAttributes(), setOmitEmptyAttributes(boolean)
at com.github.lburgazzoli.gradle.plugin.karaf.features.KarafFeaturesBuilder.<init>(KarafFeaturesBuilder.groovy:35)
at com.github.lburgazzoli.gradle.plugin.karaf.features.KarafFeaturesBuilder.<init>(KarafFeaturesBuilder.groovy:27)
However, the takeaway is that keeping VersionNumber
and ConfigureUtil
afloat is not that hard.Andrey Mishchenko
08/05/2025, 10:05 AMVladimir Sitnikov
08/05/2025, 10:06 AMBoolean
to boolean
which sounds strange.Andrey Mishchenko
08/05/2025, 10:07 AMVladimir Sitnikov
08/05/2025, 10:21 AMVersionNumber
right under my build-logic
, and it does heal VersionNumber
issue.
At the same time, forking the plugin, reworking the code, and pushing it would likely take much more time.
For instance, Gradle forbids com.github...
namespace for the plugins yet Maven Central happily accepts it.
Those small breakages accumulate over time, and they do exhaust maintainers.Vladimir Sitnikov
08/05/2025, 10:25 AMVampire
08/05/2025, 10:26 AMFor instance, Gradle forbidsnamespace for the plugins yet Maven Central happily accepts it.com.github...
Those small breakages accumulate over time, and they do exhaust maintainers.MC only accepts it for old namespaces. MC started with only accepting io.github for new namespaces.
Vampire
08/05/2025, 10:27 AMAt the same time, forks dilute the community which is bad in my opinion.As long as the main project is maintained, yes. But if it is dead and you do not have a chance to overtake it, forking is the way to keep it alive which serves the community better than just ignoring that the main project is abandoned. 🤷♂️
Vampire
08/05/2025, 10:28 AMVladimir Sitnikov
08/05/2025, 10:28 AMcom.github.autostyle
which happends to be a fork of spotless
🤣 ).
I wan’t able to publish newer versions to Gradle Portal due to Gradle’s limitation. Luckily I can still publish to Central and postpone the group migration.Vampire
08/05/2025, 10:28 AMVampire
08/05/2025, 10:30 AMVladimir Sitnikov
08/05/2025, 10:31 AMask for enabling itThe plugin was already published under
com.github.autostyle
before to Gradle Plugin Portal, and I expect they added a client-side validation.Vampire
08/05/2025, 10:32 AMAndrey Mishchenko
08/05/2025, 10:33 AMVladimir Sitnikov
08/05/2025, 10:35 AMVampire
08/05/2025, 11:38 AMI would not expect this to be client-side.
Plugins previously published under that ID hopefully can post updates.
I'd guess it is just an initial-validation check hopefully.Yep, confirmed. https://plugins.gradle.org/plugin/com.github.sakata1222.jacoco-markdown was released 2 days ago and uses latest plugin version for publishing: https://github.com/sakata1222/jacoco-markdown-gradle-plugin/blob/main/plugin/build.gradle#L10 since 2 years ago.
Vladimir Sitnikov
08/05/2025, 1:33 PMcom.gradle.plugin-publish
is 1.3.1 rather than 1.1.0 at https://github.com/sakata1222/jacoco-markdown-gradle-plugin/blob/f33e2f428792e5a62a6a5de8b88344a392f07b62/plugin/build.gradle#L10Louis Jacomet
08/06/2025, 7:14 AMplugin-portal-support at <http://gradle.com|gradle.com>