Skip to content

Too many dependencies in PDE container org.eclipse.pde.core.requiredPlugins #2244

@trancexpress

Description

@trancexpress

Regression from: #2218

An example problem: eclipse-jdt/eclipse.jdt.ui#2830

There is an abnormal number of plug-ins on the classpath now. E.g. org.eclipse.jdt.debug.tests had ~25 entries in the container before. It now has ~230.

E.g. looking at one plug-in that has no place on the classpath of org.eclipse.jdt.debug.tests, but is now: org.apache.ant

Its required by:

org.eclipse.platform 4.40.0.v20260304-2033
org.eclipse.swtbot.eclipse.test.junit 4.3.0.202510091338
org.eclipse.ant.launching 1.4.1100.v20260304-1512
org.eclipse.ant.tests.ui 3.12.500.qualifier
org.eclipse.ant.ui 3.10.500.v20260304-1512
org.eclipse.jdt.apt.core 3.8.600.v20241001-0914
org.eclipse.test 3.6.500.v20260105-1638
org.eclipse.text.quicksearch 1.3.400.v20260117-1027
ZipEditor 1.1.9.202308271843

None of these re-export their dependency (visibility:=reexport) to org.apache.ant, so why is org.eclipse.jdt.debug.tests now able to use code from org.apache.ant? I can e.g. make this change:

@@ -51,7 +51,7 @@ import org.junit.rules.TestName;
  * Tests the Open from Clipboard action.
  */
 public class OpenFromClipboardTests {
-
+       org.apache.tools.ant.taskdefs.Ant a;
        /*
         * Copy of constants from OpenFromClipboardAction
         */

It will compile in Eclipse, but it should not. See OSGI specification:

https://docs.osgi.org/specification/osgi.core/8.0.0/framework.module.html#framework.module.requirebundle

The following directives can be used in the Require-Bundle header:

visibility - If the value is private (default), then all visible packages from the required bundles are not re-exported.
If the value is reexport then bundles that require this bundle will transitively have access to these required bundle's exported packages.
That is, if bundle A requires bundle B, and bundle B requires bundle C with visibility:=reexport
then bundle A will have access to all bundle C's exported packages as if bundle A had required bundle C.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingregressionRegression defect

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions