Skip to content

Conversation

cliu123
Copy link
Member

@cliu123 cliu123 commented Oct 6, 2025

Description

Proof of concept of the proposed solution for OpenSearch plugin class loading issue causing jarHell: opensearch-project/OpenSearch#19440

Related Issues

Resolves #[Issue number to be closed when this PR is merged]

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@cliu123 cliu123 force-pushed the make_js_spi_a_separate_plugin branch from 41fe00e to 6026679 Compare October 6, 2025 18:21
@cliu123
Copy link
Member Author

cliu123 commented Oct 6, 2025

installing job-scheduler-spi plugin:

opensearch-3.3.0-SNAPSHOT % bin/opensearch-plugin install file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
-> Installing file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
-> Downloading file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
[=================================================] 100%
-> Installed opensearch-job-scheduler-spi with folder name opensearch-job-scheduler-spi

verifying the job-scheduler-spi plugin is installed:

% bin/opensearch-plugin list
opensearch-job-scheduler-spi

then installing JS plugin got jarHell:

% bin/opensearch-plugin install file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Installing file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Downloading file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
[=================================================] 100%
-> Failed installing file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Rolling back file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Rolled back file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
Exception in thread "main" java.lang.IllegalStateException: failed to load plugin opensearch-job-scheduler due to jar hell
	at org.opensearch.plugins.PluginsService.checkBundleJarHell(PluginsService.java:763)
	at org.opensearch.plugins.PluginsService.checkJarHellForPlugin(PluginsService.java:404)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.jarHellCheck(InstallPluginCommand.java:834)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.loadPluginInfo(InstallPluginCommand.java:811)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.installPlugin(InstallPluginCommand.java:846)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.execute(InstallPluginCommand.java:277)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.execute(InstallPluginCommand.java:251)
	at org.opensearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:110)
	at org.opensearch.cli.Command.mainWithoutErrorHandling(Command.java:138)
	at org.opensearch.cli.MultiCommand.execute(MultiCommand.java:104)
	at org.opensearch.cli.Command.mainWithoutErrorHandling(Command.java:138)
	at org.opensearch.cli.Command.main(Command.java:101)
	at org.opensearch.tools.cli.plugin.PluginCli.main(PluginCli.java:66)
Caused by: java.lang.IllegalStateException: jar hell!
class: org.slf4j.ILoggerFactory
jar1: /Users/cgliu/git/OpenSearch/distribution/archives/darwin-arm64-tar/build/distributions/opensearch-3.3.0-SNAPSHOT/plugins/.installing-2460427171728174955/slf4j-api-2.0.17.jar
jar2: /Users/cgliu/git/OpenSearch/distribution/archives/darwin-arm64-tar/build/distributions/opensearch-3.3.0-SNAPSHOT/plugins/opensearch-job-scheduler-spi/slf4j-api-2.0.17.jar
	at org.opensearch.common.bootstrap.JarHell.checkClass(JarHell.java:316)
	at org.opensearch.common.bootstrap.JarHell.checkJarHell(JarHell.java:215)
	at org.opensearch.plugins.PluginsService.checkBundleJarHell(PluginsService.java:749)
	... 12 more

@cliu123
Copy link
Member Author

cliu123 commented Oct 6, 2025

The runtime class path of JS main plugin. The slf4j:slf4j-api coming from both job-scheduler-spi plugin and the remote-metadata-sdk dependency of main JS plugin, which causes jarHell. Having the main job-scheduler plugin extend the job-scheduler-spi plugin actually added both main JS plugin and the SPI plugin dependencies to the runtime class path.

% ./gradlew dependencies --configuration runtimeClasspath
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
=======================================
OpenSearch Build Hamster says Hello!
  Gradle Version        : 8.14
  OS Info               : Mac OS X 15.7.1 (aarch64)
  JDK Version           : 21 (Eclipse Temurin JDK)
  JAVA_HOME             : /Users/cgliu/.sdkman/candidates/java/21.0.4-tem
  Random Testing Seed   : 8DC79DAC9FADDAB7
  Crypto Standard       : any-supported
=======================================

> Task :dependencies

------------------------------------------------------------
Root project 'opensearch-job-scheduler' - OpenSearch Job Scheduler plugin
------------------------------------------------------------

runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :opensearch-job-scheduler-spi
|    +--- com.cronutils:cron-utils:9.2.1
|    \--- org.slf4j:slf4j-api:2.0.17
+--- org.opensearch:opensearch-remote-metadata-sdk-ddb-client:3.3.0.0-SNAPSHOT
|    +--- org.opensearch:opensearch:3.3.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch-core:3.3.0-SNAPSHOT
|    |    |    +--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.18.2
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.2 (c)
|    |    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.18.2 (c)
|    |    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.18.2 (c)
|    |    |    |         +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2 (c)
|    |    |    |         \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2 (c)
|    |    |    +--- org.apache.lucene:lucene-core:10.3.0
|    |    |    \--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- org.opensearch:opensearch-compress:3.3.0-SNAPSHOT
|    |    |    +--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    |    +--- org.opensearch:opensearch-core:3.3.0-SNAPSHOT (*)
|    |    |    \--- com.github.luben:zstd-jni:1.5.6-1
|    |    +--- org.opensearch:opensearch-secure-sm:3.3.0-SNAPSHOT
|    |    |    \--- org.opensearch:opensearch-agent-policy:3.3.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch-x-content:3.3.0-SNAPSHOT
|    |    |    +--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    |    +--- org.opensearch:opensearch-core:3.3.0-SNAPSHOT (*)
|    |    |    +--- org.yaml:snakeyaml:2.1
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.18.2
|    |    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2
|    |    |    \--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.18.2
|    |    +--- org.opensearch:opensearch-geo:3.3.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch-telemetry:3.3.0-SNAPSHOT
|    |    |    \--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch-task-commons:3.3.0-SNAPSHOT
|    |    |    \--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    +--- org.apache.lucene:lucene-core:10.3.0
|    |    +--- org.apache.lucene:lucene-analysis-common:10.3.0
|    |    +--- org.apache.lucene:lucene-backward-codecs:10.3.0
|    |    +--- org.apache.lucene:lucene-grouping:10.3.0
|    |    +--- org.apache.lucene:lucene-highlighter:10.3.0
|    |    +--- org.apache.lucene:lucene-join:10.3.0
|    |    +--- org.apache.lucene:lucene-memory:10.3.0
|    |    +--- org.apache.lucene:lucene-misc:10.3.0
|    |    +--- org.apache.lucene:lucene-queries:10.3.0
|    |    +--- org.apache.lucene:lucene-queryparser:10.3.0
|    |    +--- org.apache.lucene:lucene-sandbox:10.3.0
|    |    +--- org.apache.lucene:lucene-spatial-extras:10.3.0
|    |    +--- org.apache.lucene:lucene-spatial3d:10.3.0
|    |    +--- org.apache.lucene:lucene-suggest:10.3.0
|    |    +--- org.opensearch:opensearch-cli:3.3.0-SNAPSHOT
|    |    |    +--- net.sf.jopt-simple:jopt-simple:5.0.4
|    |    |    \--- org.opensearch:opensearch-common:3.3.0-SNAPSHOT
|    |    +--- joda-time:joda-time:2.12.7
|    |    +--- com.tdunning:t-digest:3.3
|    |    +--- org.hdrhistogram:HdrHistogram:2.2.2
|    |    +--- org.locationtech.spatial4j:spatial4j:0.7
|    |    +--- org.locationtech.jts:jts-core:1.15.0
|    |    +--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- org.apache.logging.log4j:log4j-jul:2.21.0
|    |    +--- org.apache.logging.log4j:log4j-core:2.21.0
|    |    |    \--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- net.java.dev.jna:jna:5.16.0
|    |    +--- com.jcraft:jzlib:1.1.3
|    |    +--- io.projectreactor:reactor-core:3.7.5
|    |    +--- org.reactivestreams:reactive-streams:1.0.4
|    |    +--- com.google.protobuf:protobuf-java:3.25.8
|    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |    \--- org.roaringbitmap:RoaringBitmap:1.3.0
|    +--- org.apache.logging.log4j:log4j-api:2.21.0
|    +--- org.apache.logging.log4j:log4j-core:2.21.0 (*)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2
|    |    \--- com.fasterxml.jackson:jackson-bom:2.18.2 (*)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.18.2
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    \--- com.fasterxml.jackson:jackson-bom:2.18.2 (*)
|    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.2 (*)
|    |    \--- com.fasterxml.jackson:jackson-bom:2.18.2 (*)
|    +--- org.apache.httpcomponents.client5:httpclient5:5.4.4
|    |    +--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    |    +--- org.apache.httpcomponents.core5:httpcore5-h2:5.3.4
|    |    |    \--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    +--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    +--- org.opensearch:opensearch-remote-metadata-sdk:3.3.0.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch:3.3.0-SNAPSHOT (*)
|    |    +--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- org.apache.logging.log4j:log4j-core:2.21.0 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2 (*)
|    |    +--- org.apache.httpcomponents.client5:httpclient5:5.4.4 (*)
|    |    \--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    +--- org.opensearch:opensearch-remote-metadata-sdk-remote-client:3.3.0.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch:3.3.0-SNAPSHOT (*)
|    |    +--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- org.apache.logging.log4j:log4j-core:2.21.0 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2 (*)
|    |    +--- org.apache.httpcomponents.client5:httpclient5:5.4.4 (*)
|    |    +--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    |    +--- org.opensearch:opensearch-remote-metadata-sdk:3.3.0.0-SNAPSHOT (*)
|    |    \--- org.opensearch.client:opensearch-java:3.2.0
|    |         +--- jakarta.json.bind:jakarta.json.bind-api:2.0.0
|    |         +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.18.3 -> 2.18.2 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.18.3 -> 2.18.2 (*)
|    |         +--- org.eclipse:yasson:2.0.2
|    |         |    +--- jakarta.json.bind:jakarta.json.bind-api:2.0.0
|    |         |    +--- jakarta.json:jakarta.json-api:2.0.0 -> 2.1.3
|    |         |    \--- org.glassfish:jakarta.json:2.0.0
|    |         +--- commons-logging:commons-logging:1.3.5 -> 1.2
|    |         +--- org.apache.httpcomponents.client5:httpclient5:5.5 -> 5.4.4 (*)
|    |         +--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    |         +--- org.apache.httpcomponents.core5:httpcore5-h2:5.3.4 (*)
|    |         +--- com.google.code.findbugs:jsr305:3.0.2
|    |         \--- org.eclipse.parsson:parsson:1.1.7
|    |              \--- jakarta.json:jakarta.json-api:2.1.3
|    +--- org.opensearch:opensearch-remote-metadata-sdk-aos-client:3.3.0.0-SNAPSHOT
|    |    +--- org.opensearch:opensearch:3.3.0-SNAPSHOT (*)
|    |    +--- org.apache.logging.log4j:log4j-api:2.21.0
|    |    +--- org.apache.logging.log4j:log4j-core:2.21.0 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.18.2 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2 (*)
|    |    +--- org.apache.httpcomponents.client5:httpclient5:5.4.4 (*)
|    |    +--- org.apache.httpcomponents.core5:httpcore5:5.3.4
|    |    +--- org.opensearch:opensearch-remote-metadata-sdk:3.3.0.0-SNAPSHOT (*)
|    |    +--- org.opensearch:opensearch-remote-metadata-sdk-remote-client:3.3.0.0-SNAPSHOT (*)
|    |    +--- org.opensearch.client:opensearch-java:3.2.0 (*)
|    |    +--- software.amazon.awssdk:bom:2.32.29
|    |    |    +--- software.amazon.awssdk:netty-nio-client:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:dynamodb:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:apache-client:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:aws-core:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:aws-json-protocol:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:auth:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:checksums:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:checksums-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:endpoints-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:http-auth-aws:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:json-utils:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:metrics-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:profiles:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:protocol-core:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:regions:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:third-party-jackson-core:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:url-connection-client:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:retries-spi:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:http-auth:2.32.29 (c)
|    |    |    +--- software.amazon.awssdk:retries:2.32.29 (c)
|    |    |    \--- software.amazon.awssdk:http-auth-aws-eventstream:2.32.29 (c)
|    |    +--- software.amazon.awssdk:apache-client -> 2.32.29
|    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29
|    |    |    |    |    +--- org.reactivestreams:reactive-streams:1.0.4
|    |    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    |    |    +--- software.amazon.awssdk:metrics-spi:2.32.29
|    |    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    |    \--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    \--- org.reactivestreams:reactive-streams:1.0.4
|    |    |    +--- software.amazon.awssdk:metrics-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- org.apache.httpcomponents:httpclient:4.5.13
|    |    |    |    +--- org.apache.httpcomponents:httpcore:4.4.13 -> 4.4.16
|    |    |    |    +--- commons-logging:commons-logging:1.2
|    |    |    |    \--- commons-codec:commons-codec:1.11 -> 1.18.0
|    |    |    +--- org.apache.httpcomponents:httpcore:4.4.16
|    |    |    \--- commons-codec:commons-codec:1.17.1 -> 1.18.0
|    |    +--- software.amazon.awssdk:sdk-core -> 2.32.29
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:metrics-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:endpoints-spi:2.32.29
|    |    |    |    \--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    |    +--- org.reactivestreams:reactive-streams:1.0.4
|    |    |    |    \--- software.amazon.awssdk:identity-spi:2.32.29
|    |    |    |         +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |         \--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:http-auth-aws:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:checksums-spi:2.32.29
|    |    |    |    |    \--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    \--- software.amazon.awssdk:checksums:2.32.29
|    |    |    |         +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |         +--- software.amazon.awssdk:checksums-spi:2.32.29 (*)
|    |    |    |         \--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:checksums-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:checksums:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:profiles:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    \--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- software.amazon.awssdk:retries-spi:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    \--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:retries:2.32.29
|    |    |    |    +--- software.amazon.awssdk:retries-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    \--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    |    \--- org.reactivestreams:reactive-streams:1.0.4
|    |    +--- software.amazon.awssdk:aws-core -> 2.32.29
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- software.amazon.awssdk:regions:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:profiles:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:json-utils:2.32.29
|    |    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    |    \--- software.amazon.awssdk:third-party-jackson-core:2.32.29
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    |    |    +--- software.amazon.awssdk:auth:2.32.29
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:regions:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:profiles:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:json-utils:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-auth-aws:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-auth-aws-eventstream:2.32.29
|    |    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    |    \--- software.amazon.eventstream:eventstream:1.0.1
|    |    |    |    +--- software.amazon.awssdk:http-auth:2.32.29
|    |    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (*)
|    |    |    |    |    \--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (*)
|    |    |    |    \--- software.amazon.eventstream:eventstream:1.0.1
|    |    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:http-auth:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:profiles:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:metrics-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:endpoints-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:retries-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:retries:2.32.29 (*)
|    |    |    \--- software.amazon.eventstream:eventstream:1.0.1
|    |    +--- software.amazon.awssdk:aws-json-protocol -> 2.32.29
|    |    |    +--- software.amazon.awssdk:aws-core:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:protocol-core:2.32.29
|    |    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    |    \--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:third-party-jackson-core:2.32.29
|    |    |    \--- software.amazon.awssdk:json-utils:2.32.29 (*)
|    |    +--- software.amazon.awssdk:auth -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:checksums -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:checksums-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:endpoints-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-auth-aws -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-auth-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-client-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:identity-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:json-utils -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:metrics-spi -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:profiles -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:protocol-core -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:regions -> 2.32.29 (*)
|    |    +--- software.amazon.awssdk:third-party-jackson-core -> 2.32.29
|    |    +--- software.amazon.awssdk:url-connection-client -> 2.32.29
|    |    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    |    \--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    \--- software.amazon.awssdk:utils -> 2.32.29 (*)
|    +--- software.amazon.awssdk:bom:2.32.29 (*)
|    +--- software.amazon.awssdk:dynamodb -> 2.32.29
|    |    +--- software.amazon.awssdk:aws-json-protocol:2.32.29 (*)
|    |    +--- software.amazon.awssdk:protocol-core:2.32.29 (*)
|    |    +--- software.amazon.awssdk:profiles:2.32.29 (*)
|    |    +--- software.amazon.awssdk:retries-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-auth-aws:2.32.29 (*)
|    |    +--- software.amazon.awssdk:sdk-core:2.32.29 (*)
|    |    +--- software.amazon.awssdk:auth:2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-auth-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-auth:2.32.29 (*)
|    |    +--- software.amazon.awssdk:identity-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:regions:2.32.29 (*)
|    |    +--- software.amazon.awssdk:annotations:2.32.29
|    |    +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |    +--- software.amazon.awssdk:aws-core:2.32.29 (*)
|    |    +--- software.amazon.awssdk:metrics-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:json-utils:2.32.29 (*)
|    |    +--- software.amazon.awssdk:endpoints-spi:2.32.29 (*)
|    |    +--- software.amazon.awssdk:apache-client:2.32.29 (*)
|    |    \--- software.amazon.awssdk:netty-nio-client:2.32.29
|    |         +--- software.amazon.awssdk:annotations:2.32.29
|    |         +--- software.amazon.awssdk:http-client-spi:2.32.29 (*)
|    |         +--- software.amazon.awssdk:utils:2.32.29 (*)
|    |         +--- software.amazon.awssdk:metrics-spi:2.32.29 (*)
|    |         +--- io.netty:netty-codec-http:4.1.124.Final
|    |         |    +--- io.netty:netty-common:4.1.124.Final
|    |         |    +--- io.netty:netty-buffer:4.1.124.Final
|    |         |    |    \--- io.netty:netty-common:4.1.124.Final
|    |         |    +--- io.netty:netty-transport:4.1.124.Final
|    |         |    |    +--- io.netty:netty-common:4.1.124.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |    |    \--- io.netty:netty-resolver:4.1.124.Final
|    |         |    |         \--- io.netty:netty-common:4.1.124.Final
|    |         |    +--- io.netty:netty-codec:4.1.124.Final
|    |         |    |    +--- io.netty:netty-common:4.1.124.Final
|    |         |    |    +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |    |    \--- io.netty:netty-transport:4.1.124.Final (*)
|    |         |    \--- io.netty:netty-handler:4.1.124.Final
|    |         |         +--- io.netty:netty-common:4.1.124.Final
|    |         |         +--- io.netty:netty-resolver:4.1.124.Final (*)
|    |         |         +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |         +--- io.netty:netty-transport:4.1.124.Final (*)
|    |         |         +--- io.netty:netty-transport-native-unix-common:4.1.124.Final
|    |         |         |    +--- io.netty:netty-common:4.1.124.Final
|    |         |         |    +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |         |    \--- io.netty:netty-transport:4.1.124.Final (*)
|    |         |         \--- io.netty:netty-codec:4.1.124.Final (*)
|    |         +--- io.netty:netty-codec-http2:4.1.124.Final
|    |         |    +--- io.netty:netty-common:4.1.124.Final
|    |         |    +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |    +--- io.netty:netty-transport:4.1.124.Final (*)
|    |         |    +--- io.netty:netty-codec:4.1.124.Final (*)
|    |         |    +--- io.netty:netty-handler:4.1.124.Final (*)
|    |         |    \--- io.netty:netty-codec-http:4.1.124.Final (*)
|    |         +--- io.netty:netty-codec:4.1.124.Final (*)
|    |         +--- io.netty:netty-transport:4.1.124.Final (*)
|    |         +--- io.netty:netty-common:4.1.124.Final
|    |         +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         +--- io.netty:netty-handler:4.1.124.Final (*)
|    |         +--- io.netty:netty-transport-classes-epoll:4.1.124.Final
|    |         |    +--- io.netty:netty-common:4.1.124.Final
|    |         |    +--- io.netty:netty-buffer:4.1.124.Final (*)
|    |         |    +--- io.netty:netty-transport:4.1.124.Final (*)
|    |         |    \--- io.netty:netty-transport-native-unix-common:4.1.124.Final (*)
|    |         +--- io.netty:netty-resolver:4.1.124.Final (*)
|    |         +--- org.reactivestreams:reactive-streams:1.0.4
|    |         \--- org.slf4j:slf4j-api:1.7.36 -> 2.0.17
|    \--- software.amazon.awssdk:netty-nio-client -> 2.32.29 (*)
\--- org.opensearch:opensearch-remote-metadata-sdk:3.3.0.0-SNAPSHOT (*)

@cliu123
Copy link
Member Author

cliu123 commented Oct 6, 2025

After removing slf4j from job-scheduler-spi plugin, another dependency(cron-utils) causes jarHell.

% bin/opensearch-plugin remove opensearch-job-scheduler-spi
-> removing [opensearch-job-scheduler-spi]...
cgliu@98dd60759671 opensearch-3.3.0-SNAPSHOT % bin/opensearch-plugin install file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
-> Installing file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
-> Downloading file:///Users/cgliu/git/cliu_123_job-scheduler/spi/build/distributions/opensearch-job-scheduler-spi-3.3.0.0-SNAPSHOT.zip
[=================================================] 100%
-> Installed opensearch-job-scheduler-spi with folder name opensearch-job-scheduler-spi
cgliu@98dd60759671 opensearch-3.3.0-SNAPSHOT % bin/opensearch-plugin install file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Installing file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Downloading file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
[=================================================] 100%
-> Failed installing file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Rolling back file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
-> Rolled back file:///Users/cgliu/git/cliu_123_job-scheduler/build/distributions/opensearch-job-scheduler-3.3.0.0-SNAPSHOT.zip
Exception in thread "main" java.lang.IllegalStateException: failed to load plugin opensearch-job-scheduler due to jar hell
	at org.opensearch.plugins.PluginsService.checkBundleJarHell(PluginsService.java:763)
	at org.opensearch.plugins.PluginsService.checkJarHellForPlugin(PluginsService.java:404)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.jarHellCheck(InstallPluginCommand.java:834)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.loadPluginInfo(InstallPluginCommand.java:811)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.installPlugin(InstallPluginCommand.java:846)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.execute(InstallPluginCommand.java:277)
	at org.opensearch.tools.cli.plugin.InstallPluginCommand.execute(InstallPluginCommand.java:251)
	at org.opensearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:110)
	at org.opensearch.cli.Command.mainWithoutErrorHandling(Command.java:138)
	at org.opensearch.cli.MultiCommand.execute(MultiCommand.java:104)
	at org.opensearch.cli.Command.mainWithoutErrorHandling(Command.java:138)
	at org.opensearch.cli.Command.main(Command.java:101)
	at org.opensearch.tools.cli.plugin.PluginCli.main(PluginCli.java:66)
Caused by: java.lang.IllegalStateException: jar hell!
class: com.cronutils.validation.Cron
jar1: /Users/cgliu/git/OpenSearch/distribution/archives/darwin-arm64-tar/build/distributions/opensearch-3.3.0-SNAPSHOT/plugins/.installing-12229448214395248817/cron-utils-9.2.1.jar
jar2: /Users/cgliu/git/OpenSearch/distribution/archives/darwin-arm64-tar/build/distributions/opensearch-3.3.0-SNAPSHOT/plugins/opensearch-job-scheduler-spi/cron-utils-9.2.1.jar
	at org.opensearch.common.bootstrap.JarHell.checkClass(JarHell.java:316)
	at org.opensearch.common.bootstrap.JarHell.checkJarHell(JarHell.java:215)
	at org.opensearch.plugins.PluginsService.checkBundleJarHell(PluginsService.java:749)
	... 12 more

And cron-utils is required for compilation, so cron-utils cannot be removed:

> Task :opensearch-job-scheduler-spi:compileJava FAILED
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:11: error: package com.cronutils.model does not exist
import com.cronutils.model.CronType;
                          ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:12: error: package com.cronutils.model.definition does not exist
import com.cronutils.model.definition.CronDefinitionBuilder;
                                     ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:13: error: package com.cronutils.model.time does not exist
import com.cronutils.model.time.ExecutionTime;
                               ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:14: error: package com.cronutils.parser does not exist
import com.cronutils.parser.CronParser;
                           ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:15: error: package com.cronutils.utils does not exist
import com.cronutils.utils.VisibleForTesting;
                          ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
    private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                   ^
  symbol:   class CronParser
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:45: error: cannot find symbol
    private ExecutionTime executionTime;
            ^
  symbol:   class ExecutionTime
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:75: error: cannot find symbol
    void setExecutionTime(ExecutionTime executionTime) {
                          ^
  symbol:   class ExecutionTime
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/IntervalSchedule.java:11: error: package com.cronutils.utils does not exist
import com.cronutils.utils.VisibleForTesting;
                          ^
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:69: error: cannot find symbol
    @VisibleForTesting
     ^
  symbol:   class VisibleForTesting
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:74: error: cannot find symbol
    @VisibleForTesting
     ^
  symbol:   class VisibleForTesting
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/IntervalSchedule.java:186: error: cannot find symbol
    @VisibleForTesting
     ^
  symbol:   class VisibleForTesting
  location: class IntervalSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
    private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                               ^
  symbol:   class CronParser
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
    private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                                                                                      ^
  symbol:   variable CronType
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
    private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                                          ^
  symbol:   variable CronDefinitionBuilder
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:52: error: cannot find symbol
        this.executionTime = ExecutionTime.forCron(cronParser.parse(this.expression));
                             ^
  symbol:   variable ExecutionTime
  location: class CronSchedule
/Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:65: error: cannot find symbol
        executionTime = ExecutionTime.forCron(cronParser.parse(expression));
                        ^
  symbol:   variable ExecutionTime
  location: class CronSchedule
17 errors
 
[Incubating] Problems report is available at: file:///Users/cgliu/git/cliu_123_job-scheduler/build/reports/problems/problems-report.html
 
FAILURE: Build failed with an exception.
 
* What went wrong:
Execution failed for task ':opensearch-job-scheduler-spi:compileJava'.
> Compilation failed; see the compiler output below.
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
      private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                     ^
    symbol:   class CronParser
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:45: error: cannot find symbol
      private ExecutionTime executionTime;
              ^
    symbol:   class ExecutionTime
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:75: error: cannot find symbol
      void setExecutionTime(ExecutionTime executionTime) {
                            ^
    symbol:   class ExecutionTime
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:69: error: cannot find symbol
      @VisibleForTesting
       ^
    symbol:   class VisibleForTesting
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:74: error: cannot find symbol
      @VisibleForTesting
       ^
    symbol:   class VisibleForTesting
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/IntervalSchedule.java:186: error: cannot find symbol
      @VisibleForTesting
       ^
    symbol:   class VisibleForTesting
    location: class IntervalSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
      private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                                 ^
    symbol:   class CronParser
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
      private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                                                                                        ^
    symbol:   variable CronType
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:41: error: cannot find symbol
      private static CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.UNIX));
                                                            ^
    symbol:   variable CronDefinitionBuilder
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:52: error: cannot find symbol
          this.executionTime = ExecutionTime.forCron(cronParser.parse(this.expression));
                               ^
    symbol:   variable ExecutionTime
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:65: error: cannot find symbol
          executionTime = ExecutionTime.forCron(cronParser.parse(expression));
                          ^
    symbol:   variable ExecutionTime
    location: class CronSchedule
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:11: error: package com.cronutils.model does not exist
  import com.cronutils.model.CronType;
                            ^
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:12: error: package com.cronutils.model.definition does not exist
  import com.cronutils.model.definition.CronDefinitionBuilder;
                                       ^
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:13: error: package com.cronutils.model.time does not exist
  import com.cronutils.model.time.ExecutionTime;
                                 ^
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:14: error: package com.cronutils.parser does not exist
  import com.cronutils.parser.CronParser;
                             ^
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/CronSchedule.java:15: error: package com.cronutils.utils does not exist
  import com.cronutils.utils.VisibleForTesting;
                            ^
  /Users/cgliu/git/cliu_123_job-scheduler/spi/src/main/java/org/opensearch/jobscheduler/spi/schedule/IntervalSchedule.java:11: error: package com.cronutils.utils does not exist
  import com.cronutils.utils.VisibleForTesting;
                            ^
  17 errors

@cliu123
Copy link
Member Author

cliu123 commented Oct 7, 2025

The JS main plugin and job-scheduler-spi plugin structures need to be updated, so more changes will be required than converting the job-scheduler-spi plugin to a separate OpenSearch plugin.
Resolving the class loading pain will definitely improve the plugin development experience especially for extensible plugins like Job Scheduler plugin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant