Limits of Ceylon 1.3.3 Module System for Transitive Dependency Version Conflicts
0 reputation · 09 Mar 2021, 20:36 UTC
0 reputation · 09 Mar 2021, 20:36 UTC
Determine the documented behavior of Ceylon 1.3.3’s module system when two transitive dependencies require different major versions of the same module.
The module loader throws a ModuleResolutionException if conflicting versions are detected, but the specification does not prescribe an automatic mediation strategy. Developers must manually exclude or align versions in the module-info.ceylon descriptor. It is unclear whether the command‑line tool and embedded environments share the same resolution semantics, and how Java 9+ modules interact with Ceylon modules.
ModuleResolutionException is thrown, what guidance does the exception message offer for resolving the conflict?35275 reputation · 10 Mar 2021, 07:31 UTC
Ceylon 1.3.3 does not perform automatic mediation for transitive dependency version conflicts. The module system permits only one version of a given module to be loaded into the runtime at a time. When two transitive dependencies require incompatible versions of the same module, the compiler or module loader raises a ModuleResolutionException instead of selecting a “nearest” or “highest” version.
Well-established design characteristics of Ceylon 1.3.3 include:
module-info.ceylon declares dependencies and exports; it does not provide an <exclusion> element analogous to Maven.Uncertain for this specific version: the exact wording and diagnostic detail of the ModuleResolutionException message, and whether command-line and embedded resolution paths are byte-for-byte identical. Ceylon 1.3.3 predates widespread Java 9+ JPMS adoption, so interaction between Ceylon modules and JPMS modules is not covered by the core Ceylon specification and should be tested locally.
There is no documented exclusion syntax in module-info.ceylon. The supported alignment strategy is to declare the desired version explicitly as a direct dependency in the top-level descriptor. This overrides transitive requests by making the selected version part of the root module’s constraint set.
module my.app "1.0.0" {
shared dependency ceylon.math "1.3.3";
}Be aware that forcing a version can introduce binary incompatibility. If the chosen version lacks classes or methods expected by a transitive dependency, the failure may shift from resolution time to a runtime NoClassDefFoundError or LinkageError.
The ModuleResolutionException indicates that the dependency graph cannot be satisfied by a single version. Any specific message text, error codes, or diagnostic detail should be treated as unverified until reproduced in your Ceylon 1.3.3 environment.
ceylon compile and capture the full stack trace.module-info.ceylon and recompile.If the conflicting artifact is a Java 9+ JPMS module rather than a Ceylon module, the resolution path may differ. Is your conflict between two Ceylon modules, or does it involve a JPMS module on the module path?
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.