Hi everyone, I've encountered the following behavior and I'm not quite sure whether it is desirable. In my project, I have declared a dependency *X* with scope *test*. I then updated the version of a 3rd party dependency *Y*. In its new version, *Y* suddenly requires the aforementioned dependency *X* as a *compile *scoped dependency.
In this scenario, maven resolves the scope of *X* to be *test, *although it is now required by *Y* during runtime, causing ClassNotFoundExceptions. By the very nature of this behavior those mistakes can't even be detected in unit tests because *X* is available on test classpath. I have just found out that this behavior seems to be intended ( https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope) but I can't really come up with a rationale for this design. Managing any transitive compile scoped dependency down to test scope will almost certainly cause ClassNotFoundExceptions during runtime. Thoughts?
