This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Sometimes it happens that a library module A/1 1.1 has two subcomponents (packages say), Ax and Ay, but they are together in one module. Module B depends on A/1 > 1.1 and uses Ax, but does not care about Ay. Now it is decided to refactor Ay into an incompatible and different Ay2, so A/2 2.0 is released with Ax and Ay2. Technically A is now incompatible, hence to move to the A/2 major release. However module B needs to change its declaration to A/2 > 2.0 even though it is not affected by the change at all and could work just as well with A/1. So feature: permit B to declare in its manifest: OpenIDE-Module-Module-Dependencies: A/1-2 > 1.1 (syntax look natural?) which will be satisfied by module A if either: 1. It is major version 1, and the spec vers is >= 1.1. 2. It is major version 2 or higher (any spec vers). Usage style: B would initially have the normal dependency on A/1 > 1.1. When A is refactored into A/2 2.0, and the developer of B examines the changes and is satisfied that the refactoring did not incompatibly affect the portion B uses (Ax), the developer of B may change its dependency to A/1-2 > 1.1 and release a new version of B with this dependency update. This ensures that the same version of B will work with appropriate existing versions of A/1, as well as with any version of A/2 (it must be kept compatible after 2.0 of course, so this is known). It is possible that a further future refactoring into A/3 could break the Ax package, so the dependency does not make any claims about B's compatibility or incompatibility with the hypothetical A/3. Generally then a module dependency may be of the newly added forms X/j-k or X/j-k > m.n.o (no implementation version comparison permitted in this style!) Where X is a valid module code name base; j and k are integers, 0 <= j < k; m.n.o is a valid specification version. The first matches any version of X whose major release version is between j (inclusive) and k (inclusive). The second matches any version of X whose major release version is j and whose specification version is greater than or equal to m.n.o; as well as any version whose major release version is between j (exclusive) and k (inclusive), whatever the specification version. Conventionally, to minimize confusion, specification versions should always go up and not down when raising the major release version, but technically a higher major release version always indicates a newer module, regardless of the specification version. Impact on APIs other than permitting the new kind of dependency: minor implementation change in org.openide.modules.Dependency parsing code.
Will use module_deps_jan_2002 branch for implementation: branching core openide nbbuild apisupport, so far.
Work complete in branch, incl. tests; pending merge.
Implemented. http://core.netbeans.org/source/browse/core/Attic/moddeps-todo.txt?rev=1.2&content-type=text/x-cvsweb-markup
verified in nb 3.4 builds (used aut. tests from Jesse)