Behaviour of application may seem non deterministic as it fails time-to-time.
Cause:
- Application contains classes duplicated in various libraries
- Java uses simple resolution → classpath order
- Classpath order differs on each environment
- Change of environment triggers loading of different classes
- Consequence is failure when another (incompatible) class is loaded
Scenario 1 is often consequence of Scenario 2 (Hidden dependency problems).