Dealing with a bad symbolic reference in scala
Every time this hits me I have to think about it. The compiler barfs at you with something ambiguous like
[error] error: bad symbolic reference. the classpath might be incompatible with the version used when compiling Foo.class.
What this really is saying is that Foo.class
references some import or class whose namespace isn’t on the classpath or has fields missing. I usually get this when I have a project level circular dependency via transitive includes. I.e.
Repo 1/
/project A
/project B -\> depends on C and A
Repo 2
/project C -\> depends on A
So here the dependency C
pulls in a version of A
but that version may not be the same that project B
pulls in. If I do namespace refactoring in project A, then project B won’t compile if those namespaces are used by project C. It’s a mess.
Thankfully scala lets you maintain folder structure outside of package namespace, unlike java. So I can fake it till I make it by refactoring and keeping the old namespace, until I get a working build and then updating the secondary repo. It’s like a two phase commit.