Skip to content

Rely on product-info.json when building a classpath for tasks #168

@hsz

Description

With IJ 241.9959.31, plugin fails to load all necessary classes:

Execution failed for task ':plugin:core:generatePerl5Parser'.
> Exception in thread "main" java.lang.NoClassDefFoundError: io/opentelemetry/api/trace/Tracer
  	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
  	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
  	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
  	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
  	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
  	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
  	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
  	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
  	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
  	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
  	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
  	at com.intellij.platform.diagnostic.telemetry.NoopTelemetryManager.getTracer(TelemetryManager.kt:137)
  	at com.intellij.openapi.progress.impl.CoreProgressManager.<clinit>(CoreProgressManager.java:49)
  	at com.intellij.core.CoreApplicationEnvironment.createProgressIndicatorProvider(CoreApplicationEnvironment.java:142)
  	at com.intellij.core.CoreApplicationEnvironment.<init>(CoreApplicationEnvironment.java:109)
  	at com.intellij.core.CoreApplicationEnvironment.<init>(CoreApplicationEnvironment.java:72)
  	at org.intellij.grammar.LightPsi$MyParsing.<init>(LightPsi.java:152)
  	at org.intellij.grammar.LightPsi.<clinit>(LightPsi.java:55)
  	at org.intellij.grammar.Main.main(Main.java:38)
  Caused by: java.lang.ClassNotFoundException: io.opentelemetry.api.trace.Tracer
  	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
  	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
  	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
  	... 26 more

This is because some classes were moved to a new opentelemetry.jar library, which is not listed in requiredLibs:

val requiredLibs = listOf(
"app", "lib", "jdom", "trove4j", "junit", "guava", "asm-all", "automaton", "platform-api", "platform-impl",
"util", "util_rt", "annotations", "picocontainer", "extensions", "idea", "openapi", "grammar-kit",
"platform-util-ui", "platform-concurrency", "intellij-deps-fastutil",
// CLion unlike IDEA contains `MockProjectEx` in `testFramework.jar` instead of `idea.jar`
// so this jar should be in `requiredLibs` list to avoid `NoClassDefFoundError` exception
// while parser generation with CLion distribution
"testFramework", "3rd-party",
)

Use the data from the product-info.json file delivered with IJ dependency to avoid such problems.
The missing jar is present in:

launch[].bootClassPathJarNames, so it'll be necessary to discover the proper OS and architecture, like it's done in IntelliJ Platform Gradle Plugin 2.0

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions