My code compiles against scala 2.12.10 but has to run on scala 2.12.15. My code:
import import scala.tools.nsc.Settings
val settings = new Settings
settings.usejavacp.value = false
usejavacp is throwing
java.lang.NoSuchMethodError: scala.tools.nsc.Settings.usejavacp()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;
because Settings is a StandardScalaSettings where the definition of the class changed like so (only including relevant API):
2.12.10:
public interface scala.tools.nsc.settings.StandardScalaSettings {
// other APIs
public abstract scala.tools.nsc.settings.MutableSettings$BooleanSetting usejavacp();
}
to
2.12.15:
public interface scala.tools.nsc.settings.StandardScalaSettings {
// other APIs
public abstract scala.tools.nsc.settings.AbsSettings$AbsSetting usejavacp();
}
Is there any way I can make this work without upgrading my dependencies? Can I use reflection?
Yeah, runtime reflection works both in Scala 2.12.10 and 2.12.15.
You can replace
with
Reflection to call method that had its name changed in an upgrade?
By the way, regarding your deleted question IncompatibleClassChangeError: org.apache.spark.sql.catalyst.plans.logical.LeafNode
You can try runtime compilation. It seems to work both in Spark 3.1.2 and 3.3.0.