Skip to content

Conversation

@trancexpress
Copy link
Contributor

Fixes: #2045

@trancexpress
Copy link
Contributor Author

@HannesWell, @laeubi please review.

From my POV we should check what we know causes problems, which we will do with this PR.

No idea why junit-platform-engine is still included twice, it must be some dependency of a dependency.

@github-actions
Copy link

github-actions bot commented Nov 3, 2025

Test Results

   771 files  + 34     771 suites  +34   52m 57s ⏱️ + 12m 20s
 3 633 tests + 38   3 579 ✅ + 38   54 💤 ± 0  0 ❌ ±0 
10 833 runs  +495  10 670 ✅ +459  163 💤 +36  0 ❌ ±0 

Results for commit 7589c44. ± Comparison against base commit 27f380f.

♻️ This comment has been updated with latest results.

@HannesWell
Copy link
Member

From my POV we should check what we know causes problems, which we will do with this PR.

In general yes, but as the problem where two versions of a class from the junit-platform-engine bundle, I think two versions of junit-platform-engine are still a necessity for the problem. But it seems they are not a sufficiency and other factors play a role here as well.

No idea why junit-platform-engine is still included twice, it must be some dependency of a dependency.

I think that should also be investigated as well to see if something is wrong somewhere.

Maybe the error also doesn't surface anymore because of

But for complete JUnit-6 support this probably has to be reworked and in general I think it's better to not mix the junit-jupiter versions in the runtime. So this check could still be valuable (but maybe the wording could be made less severe).

@laeubi
Copy link
Contributor

laeubi commented Nov 4, 2025

Maybe the error also doesn't surface anymore because of

#2071

I explicitly developed and tested this with both JUnit 5 + 6 in the runtime, so yes it likely fixed that.

The only problem now should arise is if the user has an unbounded JUnit import and it resolves to a higher version (or more formally not matching the selected runtime!), maybe this is better checked here and recorded to give a consistent error message see below.

But for complete JUnit-6 support this probably has to be reworked and in general I think it's better to not mix the junit-jupiter versions in the runtime. So this check could still be valuable (but maybe the wording could be made less severe).

I'd like to highlight that the test has only a dependency on JUnit 5, I have selected JUnit 5 runtime to execute and I have only selected the test bundle.

So from that I cannot see how JUnit 6 should ever be included (whether or not it causes issues!) so I think this has to be investigated and fixed. If it is due to any dependency in the chain we should fix it and the message MUST clearly state what bundle is pulling in the JUnit 6, otherwise it is completely impossible for the user to act on this warning and it is better not shown at all.

@trancexpress
Copy link
Contributor Author

Requirements like these are not a problem for running a test:

 junit-jupiter-api;bundle-version="[5,6)",
 junit-jupiter-api;bundle-version="[6,7)"
 junit-jupiter-api,
 junit-platform-engine;bundle-version="[1,2)",
 junit-platform-engine;bundle-version="[6,7)"

These are a problem:

 org.junit,
 junit-jupiter-api,
 junit-platform-engine;bundle-version="[1,2)",
 junit-jupiter-engine;bundle-version="[6,7)"
 junit-jupiter-api,
 junit-platform-engine;bundle-version="[6,7)",
 junit-jupiter-engine;bundle-version="[5,6)"
 junit-jupiter-api,
 junit-jupiter-engine;bundle-version="[6,7)",
 junit-jupiter-engine;bundle-version="[5,6)"

The (new) error is:

!ENTRY org.eclipse.ui 4 0 2025-11-04 10:29:10.880
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.IllegalArgumentException: Bundle "TestPlugin" not found. Possible causes include missing dependencies, too restrictive version ranges, or a non-matching required execution environment.
	at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.createJUnit5PluginClassLoader(RemotePluginTestRunner.java:137)
	at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:108)
	at org.eclipse.pde.internal.junit.runtime.PlatformUITestHarness.lambda$0(PlatformUITestHarness.java:45)

If it is due to any dependency in the chain we should fix it and the message MUST clearly state what bundle is pulling in the JUnit 6,

I'll try to get the bundle that depends on JUnit 6 here, maybe its simple.

otherwise it is completely impossible for the user to act on this warning and it is better not shown at all

I'm not sure the new error helps to understand what the problem is, the dialog at least explains its mixed JUnit versions. I guess if the error mentions mixed JUnit 5 and 6 as a problem, we can drop the dialog?

Lets see if we can include the bundle that depends on the unexpected JUnit version, if we can't we can drop the dialog altogether and mention mixing JUnit versions in the new error message.

@trancexpress
Copy link
Contributor Author

trancexpress commented Nov 4, 2025

It seems difficult to analyze the problem that @laeubi ran into. There is no bundle that requires junit-platform-engine directly, but org.apache.ant has package imports that resolve to JUnit 6 versions:

org.apache.ant: org.junit.platform.launcher.listeners -> 6.0.1
org.apache.ant: org.junit.platform.launcher.core -> 6.0.1
org.apache.ant: org.junit.platform.launcher -> 6.0.1
org.apache.ant: org.junit.platform.engine.support.descriptor -> 6.0.1
org.apache.ant: org.junit.platform.engine.reporting -> 6.0.1
org.apache.ant: org.junit.platform.engine.discovery -> 6.0.1
org.apache.ant: org.junit.platform.engine -> 6.0.1

For package imports, we'll have to know what packages are exported by the bundles we test for.

@trancexpress
Copy link
Contributor Author

trancexpress commented Nov 4, 2025

Interestingly this MANIFEST.MF results in no error on command line and nothing is executed:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TestPlugin
Bundle-SymbolicName: TestPlugin
Bundle-Version: 1.0.0.qualifier
Require-Bundle: org.eclipse.swt,
 org.eclipse.jface,
 org.junit,
 junit-jupiter-api,
 junit-jupiter-engine
Automatic-Module-Name: TestPlugin
Bundle-RequiredExecutionEnvironment: JavaSE-21

Same for:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TestPlugin
Bundle-SymbolicName: TestPlugin
Bundle-Version: 1.0.0.qualifier
Require-Bundle: org.eclipse.swt,
 org.eclipse.jface,
 org.junit,
 junit-jupiter-api
Automatic-Module-Name: TestPlugin
Bundle-RequiredExecutionEnvironment: JavaSE-21

Just this is logged:

!ENTRY org.eclipse.jdt.junit 4 0 2025-11-04 12:10:16.194
!MESSAGE No tests found with test runner 'JUnit 5'.

@laeubi
Copy link
Contributor

laeubi commented Nov 4, 2025

interestingly this MANIFEST.MF results in no error on command line and nothing is executed:

I have already explained that case, the test is using JUnit 6 so JUnit 5 runtime will not see the annotation so no error and no tests executed...

@trancexpress
Copy link
Contributor Author

I've updated the PR to report the bundle that requires/imports junit-jupiter-engine.

Mixing junit-jupiter-engine and junit-platform-engine versions also causes errors, but this is more difficult to check and would require a different message. We would have to check if the conflict is caused by two bundles and mention them both... Definitely valuable but a lot more complicated.

My intention for #2045 was to warn the user if they require junit-jupiter-api without version restrictions and start a JUnit 5 plug-in test.

map.put("org.junit.jupiter.api", BuildPathSupport.JUNIT_JUPITER_API); //$NON-NLS-1$
map.put("org.junit.jupiter.engine", BuildPathSupport.JUNIT_JUPITER_ENGINE); //$NON-NLS-1$
map.put("org.junit.platofrm.engine", BuildPathSupport.JUNIT_PLATFORM_ENGINE); //$NON-NLS-1$
map.put(BuildPathSupport.JUNIT_JUPITER_API, BuildPathSupport.JUNIT_JUPITER_API);
Copy link
Contributor Author

@trancexpress trancexpress Nov 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we want to report the bundle that depends on JUnit 6, we can no longer just look for junit-jupiter-engine. Since we find that in the dependencies of junit-jupiter-api, which we must skip for the report to make sense - we are not reporting the whole chain of dependencies.

The report then looks like this:

Screenshot_20251104_134117

* The dependency from junit-jupiter-api 5.x to junit-jupiter-engine 5.x doesn't interfere here.
*/
if (junitJupiterEngine5 != null && junitPlatformEngine6 != null) {
String message = NLS.bind(PDEMessages.JUnitLaunchConfiguration_error_JUnitLaunchAndRuntimeMissmatch, 5, 6, junitPlatformEngine6.fromBundle, junitPlatformEngine6.toBundle);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure its worth to report this. I'm sure there are other errors that we are not aware of, this must just be one of many.

@HannesWell
Copy link
Member

It seems difficult to analyze the problem that @laeubi ran into. There is no bundle that requires junit-platform-engine directly, but org.apache.ant has package imports that resolve to JUnit 6 versions:

Good finding. The imports of ant are in fact optional.
Have you tried to turn off the inclusion of optional dependencies for the test launch? That should at least cut that wire.
Cases like this are the reason why I strongly recommend to not include optional dependencies by default and why it's turned off for product/Eclipse app launches.
Maybe we should rethink about the default value for new JUnit Plugin test launch configs.
Additionally we could ask ANT to use Dynamic-ImportPackage instead, if that would be possible. But it would probably take some time and would only fix that one particular case.

I've updated the PR to report the bundle that requires/imports junit-jupiter-engine.

I appreciate your effort to provide more information to the user and it's indeed difficult to find the cause for the inclusion. But for this dialog it seems quite heavy weight and I actually prefer to keep this dialog simple.

However, as it's a general problem to find out why a particular bundle is part of the runtime, I'd prefer to provide a general solution to that problem.
I'm thinking about an analysis tool like the Plug-in Dependencies view but for Products or in Eclipse-App launch configurations.
It would be somewhat orthogonal to

This could then be used to analyze problems like this.
Would you be interested in working on that? Admittedly it would be a larger and more general task than this one.

For today I don't have more time, but I'll try my best to follow-up on this tomorrow.

@trancexpress
Copy link
Contributor Author

OK, @laeubi wants to report which bundle requires a "bad" JUnit version, which I think is useful. @HannesWell wants this but not in the validation here.

So should we remove the validation until its clear what is wanted in PDE and how to achieve it?

In its current form, the validation its reporting a problem that doesn't exist. And the problem it does report, I guess we can mention in RemotePluginTestRunner.createJUnit5PluginClassLoader() that mixed JUnit 5 and JUnit 6 versions also can be a problem; as a user I'll be able to find the root cause with that information.

@trancexpress
Copy link
Contributor Author

* [Added a button to show launch bundles #1922](https://github.com/eclipse-pde/eclipse.pde/pull/1922)

This could then be used to analyze problems like this. Would you be interested in working on that? Admittedly it would be a larger and more general task than this one.

Sorry, I doubt I'll find time for that. I assume the problem can already be analyzed by plugin-dependencies with some effort by the user.

@trancexpress trancexpress force-pushed the gh2045 branch 2 times, most recently from abe1307 to b83ba17 Compare November 5, 2025 06:00
@laeubi
Copy link
Contributor

laeubi commented Nov 5, 2025

@merks should we fix the ant bundle (I think its from orbit?)

@trancexpress @HannesWell I would step back and maybe think about a different approach!

When we launch a run, there is already a validation step that results in this "Missing requirements" dialog if something went wrong. When we do this we create a state and resolve it and then check for errors to show in this dialog. I think this would be much more suitable than what we can get from the current dialog as it already has ways to report errors and problems.

So as a rough idea I would do the following:

  • in BundleValidationOperation add a method to set a ResolverHook
  • Then in org.eclipse.pde.internal.core.BundleValidationOperation.run(IProgressMonitor) where the state is created set for the state a ResolverHookFactory that returns just this hook
  • In the ResolverHook().filterMatches(BundleRequirement, Collection<BundleCapability>) we can inspect possible candidate for a requirement and get the bundle that require it
  • We simply loop through the capabilites, and check if it is any of our well known junit bundles and if yes if it matches check the version according to if it is Junit5.
  • If we find a missmatch then record the offending bundle and requirement
  • The add this ass an additional error to the result afterwards and show the dialog

That way it becomes a real validation warning, and the user can still choose to ignore that one. This will then also cover the case that the test-bundle itself has not proper imports.

To maybe get some of the boilerplate code easier I fired up a session here, maybe it can act as an inspiration (will take some minutes to show up results):

Copilot AI added a commit to laeubi/eclipse.pde that referenced this pull request Nov 5, 2025
- Modified JUnitLaunchValidationOperation to call parent's run() first to resolve the state
- Added checkForJUnit6InJUnit5Launch() to detect JUnit 6+ bundles in JUnit 5 launches
- Added findBundleRequiringJUnit6() to identify which bundle is pulling in JUnit 6
- Updated error reporting to include the bundle causing the conflict
- Added new message key JUnitLaunchConfiguration_error_JUnitLaunchAndRuntimeMissmatch_withRequiringBundle
- Merged parent validation errors with JUnit-specific errors in getInput() and hasErrors()

This implements the validation as described in PR eclipse-pde#2092 comment #3489590138

Co-authored-by: laeubi <[email protected]>
@merks
Copy link
Contributor

merks commented Nov 5, 2025

I really don't know that it's true that ant cannot work with an arbitrary version of junit, so going down a path that effectively requires the entire ecosystem to add upper bounds (that may not even be appropriate or needed) is probably a long and winding road that will never reach an end.

What appears to be the case is that a combination doesn't work and the logic is probably best implemented to avoid that. For ant those package imports are optional:

image

I don't know if optional imports are even needed; I see no uses for the in the BND generated bundle.

In any case, why an optional bundle import should force a "too high" version of some bundle to be resolved seems mysterious to me.

@laeubi
Copy link
Contributor

laeubi commented Nov 5, 2025

In any case, why an optional bundle import should force a "too high" version of some bundle to be resolved seems mysterious to me.

A user can choose in the run config to include optional requirements and often it is a good thing because many "optionals" are not that optional in reality (remember fragments are also "optional") as they are claimed.

And whatever ant requires here I highly doubt it is JUnit 6 so restricting the optional import to version 5 at maximum would not harm nor seems something we should bug the user with. For me any unrestricted version range is simply an error. So including JUnit 6 is here correct and PDE has no way to know that this is not needed for this bundle.

Nevertheless PDE can probably do better and already do in many places (e.g as you can see it actually works to launch here), the question is more how much effort should be put into helping people keeping bad metadata (e.g. missing version ranges on imports)...

@merks
Copy link
Contributor

merks commented Nov 5, 2025

The world is a bad place:

image
MANIFEST.MF
[MANIFEST]

Automatic-Module-Name                   org.apache.ant
Bundle-ClassPath                        lib/ant-antlr.jar
                                        lib/ant-apache-bcel.jar
                                        lib/ant-apache-bsf.jar
                                        lib/ant-apache-log4j.jar
                                        lib/ant-apache-oro.jar
                                        lib/ant-apache-regexp.jar
                                        lib/ant-apache-resolver.jar
                                        lib/ant-apache-xalan2.jar
                                        lib/ant-commons-logging.jar
                                        lib/ant-commons-net.jar
                                        lib/ant-imageio.jar
                                        lib/ant-jakartamail.jar
                                        lib/ant-javamail.jar
                                        lib/ant-jdepend.jar
                                        lib/ant-jmf.jar
                                        lib/ant-jsch.jar
                                        lib/ant-junit.jar
                                        lib/ant-junit4.jar
                                        lib/ant-junitlauncher.jar
                                        lib/ant-launcher.jar
                                        lib/ant-netrexx.jar
                                        lib/ant-swing.jar
                                        lib/ant-testutil.jar
                                        lib/ant-xz.jar
                                        lib/ant.jar
Bundle-ManifestVersion                  2
Bundle-Name                             Apache Ant
Bundle-SymbolicName                     org.apache.ant
Bundle-Version                          1.10.15.v20240901-1000
Eclipse-BundleShape                     dir
Eclipse-Wrapped-Bundle                  org.apache.ant:ant:1.10.15
Export-Package                          org.apache.tools.ant.attribute;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.dispatch;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.filters.util;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.filters;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.helper;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.xml.sax,org.xml.sax.helpers"
                                        org.apache.tools.ant.input;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.launch;version="1.10.15"
                                        org.apache.tools.ant.listener;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.loader;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.property;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.taskdefs.compilers;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.condition;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.apache.tools.ant.types.selectors"
                                        org.apache.tools.ant.taskdefs.cvslib;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.email;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.launcher;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs.modules;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.ccm;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.clearcase;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.depend.constantpool;version="1.10.15"
                                        org.apache.tools.ant.taskdefs.optional.depend;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.apache.tools.ant.util.depend"
                                        org.apache.tools.ant.taskdefs.optional.ejb;version="1.10.15";uses:="javax.xml.parsers,org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.xml.sax"
                                        org.apache.tools.ant.taskdefs.optional.extension.resolvers;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional.extension"
                                        org.apache.tools.ant.taskdefs.optional.extension;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional.extension.resolvers,org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs.optional.i18n;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.image;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.apache.tools.ant.types.optional.imageio,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs.optional.j2ee;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.javacc;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.javah;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.jdepend;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.jlink;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.jsp.compilers;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional.jsp,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.jsp;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.junit.xsl;version="1.10.15"
                                        org.apache.tools.ant.taskdefs.optional.junit;version="1.10.15";uses:="javax.xml.parsers,junit.framework,org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.junit.runner,org.junit.runner.notification,org.w3c.dom"
                                        org.apache.tools.ant.taskdefs.optional.junitlauncher.confined;version="1.10.15";uses:="javax.xml.stream,org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.junitlauncher;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional.junitlauncher.confined,org.junit.platform.launcher"
                                        org.apache.tools.ant.taskdefs.optional.native2ascii;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs.optional,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.net;version="1.10.15";uses:="javax.net.ssl,org.apache.commons.net.bsd,org.apache.commons.net.ftp,org.apache.commons.net.telnet,org.apache.tools.ant,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs.optional.pvcs;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.script;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs.optional.sos;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.sound;version="1.10.15";uses:="javax.sound.sampled,org.apache.tools.ant"
                                        org.apache.tools.ant.taskdefs.optional.splash;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.taskdefs.optional.ssh;version="1.10.15";uses:="com.jcraft.jsch,org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.testing;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.condition"
                                        org.apache.tools.ant.taskdefs.optional.unix;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.dispatch,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.vss;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.taskdefs.optional.windows;version="1.10.15";uses:="org.apache.tools.ant.taskdefs"
                                        org.apache.tools.ant.taskdefs.optional.xz;version="1.10.15";uses:="org.apache.tools.ant.taskdefs"
                                        org.apache.tools.ant.taskdefs.optional;version="1.10.15";uses:="javax.xml.transform,org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.optional.javah,org.apache.tools.ant.taskdefs.optional.native2ascii,org.apache.tools.ant.types,org.apache.tools.ant.util,org.apache.tools.ant.util.facade,org.junit,org.junit.rules,org.w3c.dom,org.xml.sax"
                                        org.apache.tools.ant.taskdefs.rmic;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.taskdefs;version="1.10.15";uses:="javax.xml.namespace,org.apache.tools.ant,org.apache.tools.ant.filters,org.apache.tools.ant.property,org.apache.tools.ant.taskdefs.compilers,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.taskdefs.launcher,org.apache.tools.ant.taskdefs.rmic,org.apache.tools.ant.types,org.apache.tools.ant.types.resources,org.apache.tools.ant.types.resources.selectors,org.apache.tools.ant.types.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org.apache.tools.ant.types.spi,org.apache.tools.ant.util,org.apache.tools.ant.util.facade,org.apache.tools.tar,org.apache.tools.zip,org.w3c.dom,org.xml.sax"
                                        org.apache.tools.ant.types.conditions;version="1.10.15"
                                        org.apache.tools.ant.types.mappers;version="1.10.15";uses:="org.apache.tools.ant.types,org.apache.tools.ant.util"
                                        org.apache.tools.ant.types.optional.depend;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.types.optional.imageio;version="1.10.15";uses:="org.apache.tools.ant.types"
                                        org.apache.tools.ant.types.optional.xz;version="1.10.15";uses:="org.apache.tools.ant.types,org.apache.tools.ant.types.resources"
                                        org.apache.tools.ant.types.optional;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.filters,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.types,org.apache.tools.ant.types.selectors,org.apache.tools.ant.util"
                                        org.apache.tools.ant.types.resolver;version="1.10.15";uses:="org.apache.tools.ant.types,org.apache.xml.resolver,org.apache.xml.resolver.tools"
                                        org.apache.tools.ant.types.resources.comparators;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.types.resources.selectors;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.types.resources.comparators"
                                        org.apache.tools.ant.types.resources;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.types.resources.comparators,org.apache.tools.ant.types.resources.selectors,org.apache.tools.ant.types.selectors,org.apache.tools.ant.util,org.apache.tools.tar,org.apache.tools.zip"
                                        org.apache.tools.ant.types.selectors.modifiedselector;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.types.resources.selectors,org.apache.tools.ant.types.selectors"
                                        org.apache.tools.ant.types.selectors;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.types.resources.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org.apache.tools.ant.util"
                                        org.apache.tools.ant.types.spi;version="1.10.15";uses:="org.apache.tools.ant"
                                        org.apache.tools.ant.types;version="1.10.15";uses:="javax.xml.transform,org.apache.tools.ant,org.apache.tools.ant.filters,org.apache.tools.ant.taskdefs,org.apache.tools.ant.types.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org.apache.tools.ant.util,org.apache.tools.ant.util.regexp,org.junit,org.junit.rules,org.xml.sax"
                                        org.apache.tools.ant.util.depend.bcel;version="1.10.15";uses:="org.apache.bcel.classfile,org.apache.tools.ant.util.depend"
                                        org.apache.tools.ant.util.depend;version="1.10.15";uses:="org.apache.tools.ant.types"
                                        org.apache.tools.ant.util.facade;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.types"
                                        org.apache.tools.ant.util.java15;version="1.10.15"
                                        org.apache.tools.ant.util.optional;version="1.10.15";uses:="org.apache.tools.ant,org.apache.tools.ant.util"
                                        org.apache.tools.ant.util.regexp;version="1.10.15";uses:="org.apache.oro.text.regex,org.apache.regexp,org.apache.tools.ant,org.junit"
                                        org.apache.tools.ant.util;version="1.10.15";uses:="javax.xml.parsers,org.apache.tools.ant,org.apache.tools.ant.types,org.apache.tools.ant.types.resources,org.apache.tools.ant.types.resources.selectors,org.apache.tools.ant.util.optional,org.apache.tools.ant.util.regexp,org.w3c.dom,org.xml.sax"
                                        org.apache.tools.ant;version="1.10.15";uses:="junit.framework,org.apache.tools.ant.input,org.apache.tools.ant.launch,org.apache.tools.ant.property,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.types,org.apache.tools.ant.types.selectors,org.junit.rules,org.xml.sax"
                                        org.apache.tools.bzip2;version="1.10.15"
                                        org.apache.tools.mail;version="1.10.15"
                                        org.apache.tools.tar;version="1.10.15";uses:="org.apache.tools.zip"
                                        org.apache.tools.zip;version="1.10.15"
Import-Package                          COM.ibm.netrexx.process;resolution:=optional
                                        com.jcraft.jsch;resolution:=optional
                                        com.sun.tools.javac;resolution:=optional
                                        com.sun.tools.javah.oldjavah;resolution:=optional
                                        com.sun.tools.javah;resolution:=optional
                                        gnu.classpath;resolution:=optional
                                        gnu.gcj;resolution:=optional
                                        jakarta.activation;resolution:=optional
                                        jakarta.mail.internet;resolution:=optional
                                        jakarta.mail;resolution:=optional
                                        java.awt.event;resolution:=optional
                                        java.awt.geom;resolution:=optional
                                        java.awt.image;resolution:=optional
                                        java.awt;resolution:=optional
                                        java.io;resolution:=optional
                                        java.lang.annotation;resolution:=optional
                                        java.lang.invoke;resolution:=optional
                                        java.lang.management;resolution:=optional
                                        java.lang.module;resolution:=optional
                                        java.lang.ref;resolution:=optional
                                        java.lang.reflect;resolution:=optional
                                        java.lang;resolution:=optional
                                        java.math;resolution:=optional
                                        java.net;resolution:=optional
                                        java.nio.channels;resolution:=optional
                                        java.nio.charset;resolution:=optional
                                        java.nio.file.attribute;resolution:=optional
                                        java.nio.file;resolution:=optional
                                        java.nio;resolution:=optional
                                        java.rmi;resolution:=optional
                                        java.security.cert;resolution:=optional
                                        java.security;resolution:=optional
                                        java.sql;resolution:=optional
                                        java.text;resolution:=optional
                                        java.time;resolution:=optional
                                        java.util.concurrent.atomic;resolution:=optional
                                        java.util.concurrent;resolution:=optional
                                        java.util.function;resolution:=optional
                                        java.util.jar;resolution:=optional
                                        java.util.regex;resolution:=optional
                                        java.util.spi;resolution:=optional
                                        java.util.stream;resolution:=optional
                                        java.util.zip;resolution:=optional
                                        java.util;resolution:=optional
                                        javax.activation;resolution:=optional
                                        javax.imageio.stream;resolution:=optional
                                        javax.imageio;resolution:=optional
                                        javax.mail.internet;resolution:=optional
                                        javax.mail;resolution:=optional
                                        javax.net.ssl;resolution:=optional
                                        javax.script;resolution:=optional
                                        javax.sound.sampled;resolution:=optional
                                        javax.swing.border;resolution:=optional
                                        javax.swing;resolution:=optional
                                        javax.xml.namespace;resolution:=optional
                                        javax.xml.parsers;resolution:=optional
                                        javax.xml.stream;resolution:=optional
                                        javax.xml.transform.sax;resolution:=optional
                                        javax.xml.transform.stream;resolution:=optional
                                        javax.xml.transform;resolution:=optional
                                        javax.xml.xpath;resolution:=optional
                                        jdepend.framework;resolution:=optional
                                        jdepend.textui;resolution:=optional
                                        jdepend.xmlui;resolution:=optional
                                        junit.framework;resolution:=optional
                                        kaffe.util;resolution:=optional
                                        netrexx.lang;resolution:=optional
                                        org.apache.bcel.classfile;resolution:=optional
                                        org.apache.bsf;resolution:=optional
                                        org.apache.commons.logging;resolution:=optional
                                        org.apache.commons.net.bsd;resolution:=optional
                                        org.apache.commons.net.ftp;resolution:=optional
                                        org.apache.commons.net.telnet;resolution:=optional
                                        org.apache.env;resolution:=optional
                                        org.apache.harmony.luni.util;resolution:=optional
                                        org.apache.log4j;resolution:=optional
                                        org.apache.oro.text.regex;resolution:=optional
                                        org.apache.regexp;resolution:=optional
                                        org.apache.tools.ant.attribute;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.dispatch;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.filters.util;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.filters;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.helper;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.input;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.launch;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.listener;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.property;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.compilers;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.condition;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.email;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.launcher;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.depend.constantpool;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.extension.resolvers;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.extension;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.javah;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.jsp.compilers;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.jsp;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.junitlauncher.confined;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.native2ascii;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional.net;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.optional;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs.rmic;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.taskdefs;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.optional.imageio;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.resources.comparators;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.resources.selectors;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.resources;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.selectors.modifiedselector;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.selectors;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types.spi;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.types;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util.depend;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util.facade;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util.java15;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util.optional;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util.regexp;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant.util;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.ant;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.bzip2;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.mail;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.tar;resolution:=optional;version="[1.10,2)"
                                        org.apache.tools.zip;resolution:=optional;version="[1.10,2)"
                                        org.apache.xalan.trace;resolution:=optional
                                        org.apache.xalan.transformer;resolution:=optional
                                        org.apache.xml.resolver.helpers;resolution:=optional
                                        org.apache.xml.resolver.tools;resolution:=optional
                                        org.apache.xml.resolver;resolution:=optional
                                        org.junit.Suite;resolution:=optional
                                        org.junit.platform.engine.discovery;resolution:=optional
                                        org.junit.platform.engine.reporting;resolution:=optional
                                        org.junit.platform.engine.support.descriptor;resolution:=optional
                                        org.junit.platform.engine;resolution:=optional
                                        org.junit.platform.launcher.core;resolution:=optional
                                        org.junit.platform.launcher.listeners;resolution:=optional
                                        org.junit.platform.launcher;resolution:=optional
                                        org.junit.rules;resolution:=optional
                                        org.junit.runner.manipulation;resolution:=optional
                                        org.junit.runner.notification;resolution:=optional
                                        org.junit.runner;resolution:=optional
                                        org.junit;resolution:=optional
                                        org.tukaani.xz;resolution:=optional
                                        org.w3c.dom;resolution:=optional
                                        org.xml.sax.helpers;resolution:=optional
                                        org.xml.sax;resolution:=optional
                                        sun.rmi.rmic;resolution:=optional
                                        sun.tools.javac;resolution:=optional
                                        sun.tools.native2ascii;resolution:=optional
                                        weblogic;resolution:=optional
Manifest-Version                        1.0
Require-Capability                      osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"


[IMPEXP]

Import-Package
  COM.ibm.netrexx.process                {resolution:=optional}
  com.jcraft.jsch                        {resolution:=optional}
  com.sun.tools.javac                    {resolution:=optional}
  com.sun.tools.javah                    {resolution:=optional}
  com.sun.tools.javah.oldjavah           {resolution:=optional}
  gnu.classpath                          {resolution:=optional}
  gnu.gcj                                {resolution:=optional}
  jakarta.activation                     {resolution:=optional}
  jakarta.mail                           {resolution:=optional}
  jakarta.mail.internet                  {resolution:=optional}
  java.awt                               {resolution:=optional}
  java.awt.event                         {resolution:=optional}
  java.awt.geom                          {resolution:=optional}
  java.awt.image                         {resolution:=optional}
  java.io                                {resolution:=optional}
  java.lang                              {resolution:=optional}
  java.lang.annotation                   {resolution:=optional}
  java.lang.invoke                       {resolution:=optional}
  java.lang.management                   {resolution:=optional}
  java.lang.module                       {resolution:=optional}
  java.lang.ref                          {resolution:=optional}
  java.lang.reflect                      {resolution:=optional}
  java.math                              {resolution:=optional}
  java.net                               {resolution:=optional}
  java.nio                               {resolution:=optional}
  java.nio.channels                      {resolution:=optional}
  java.nio.charset                       {resolution:=optional}
  java.nio.file                          {resolution:=optional}
  java.nio.file.attribute                {resolution:=optional}
  java.rmi                               {resolution:=optional}
  java.security                          {resolution:=optional}
  java.security.cert                     {resolution:=optional}
  java.sql                               {resolution:=optional}
  java.text                              {resolution:=optional}
  java.time                              {resolution:=optional}
  java.util                              {resolution:=optional}
  java.util.concurrent                   {resolution:=optional}
  java.util.concurrent.atomic            {resolution:=optional}
  java.util.function                     {resolution:=optional}
  java.util.jar                          {resolution:=optional}
  java.util.regex                        {resolution:=optional}
  java.util.spi                          {resolution:=optional}
  java.util.stream                       {resolution:=optional}
  java.util.zip                          {resolution:=optional}
  javax.activation                       {resolution:=optional}
  javax.imageio                          {resolution:=optional}
  javax.imageio.stream                   {resolution:=optional}
  javax.mail                             {resolution:=optional}
  javax.mail.internet                    {resolution:=optional}
  javax.net.ssl                          {resolution:=optional}
  javax.script                           {resolution:=optional}
  javax.sound.sampled                    {resolution:=optional}
  javax.swing                            {resolution:=optional}
  javax.swing.border                     {resolution:=optional}
  javax.xml.namespace                    {resolution:=optional}
  javax.xml.parsers                      {resolution:=optional}
  javax.xml.stream                       {resolution:=optional}
  javax.xml.transform                    {resolution:=optional}
  javax.xml.transform.sax                {resolution:=optional}
  javax.xml.transform.stream             {resolution:=optional}
  javax.xml.xpath                        {resolution:=optional}
  jdepend.framework                      {resolution:=optional}
  jdepend.textui                         {resolution:=optional}
  jdepend.xmlui                          {resolution:=optional}
  junit.framework                        {resolution:=optional}
  kaffe.util                             {resolution:=optional}
  netrexx.lang                           {resolution:=optional}
  org.apache.bcel.classfile              {resolution:=optional}
  org.apache.bsf                         {resolution:=optional}
  org.apache.commons.logging             {resolution:=optional}
  org.apache.commons.net.bsd             {resolution:=optional}
  org.apache.commons.net.ftp             {resolution:=optional}
  org.apache.commons.net.telnet          {resolution:=optional}
  org.apache.env                         {resolution:=optional}
  org.apache.harmony.luni.util           {resolution:=optional}
  org.apache.log4j                       {resolution:=optional}
  org.apache.oro.text.regex              {resolution:=optional}
  org.apache.regexp                      {resolution:=optional}
  org.apache.tools.ant                   {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.attribute         {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.dispatch          {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.filters           {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.filters.util      {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.helper            {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.input             {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.launch            {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.listener          {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.property          {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs          {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.compilers {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.condition {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.email    {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.launcher {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.depend.constantpool {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.extension {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.extension.resolvers {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.javah {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.jsp {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.jsp.compilers {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.junitlauncher.confined {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.native2ascii {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.net {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.taskdefs.rmic     {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types             {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.optional.imageio {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.resources   {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.resources.comparators {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.resources.selectors {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.selectors   {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.selectors.modifiedselector {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.types.spi         {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util              {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util.depend       {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util.facade       {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util.java15       {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util.optional     {resolution:=optional, version=[1.10,2)}
  org.apache.tools.ant.util.regexp       {resolution:=optional, version=[1.10,2)}
  org.apache.tools.bzip2                 {resolution:=optional, version=[1.10,2)}
  org.apache.tools.mail                  {resolution:=optional, version=[1.10,2)}
  org.apache.tools.tar                   {resolution:=optional, version=[1.10,2)}
  org.apache.tools.zip                   {resolution:=optional, version=[1.10,2)}
  org.apache.xalan.trace                 {resolution:=optional}
  org.apache.xalan.transformer           {resolution:=optional}
  org.apache.xml.resolver                {resolution:=optional}
  org.apache.xml.resolver.helpers        {resolution:=optional}
  org.apache.xml.resolver.tools          {resolution:=optional}
  org.junit                              {resolution:=optional}
  org.junit.Suite                        {resolution:=optional}
  org.junit.platform.engine              {resolution:=optional}
  org.junit.platform.engine.discovery    {resolution:=optional}
  org.junit.platform.engine.reporting    {resolution:=optional}
  org.junit.platform.engine.support.descriptor {resolution:=optional}
  org.junit.platform.launcher            {resolution:=optional}
  org.junit.platform.launcher.core       {resolution:=optional}
  org.junit.platform.launcher.listeners  {resolution:=optional}
  org.junit.rules                        {resolution:=optional}
  org.junit.runner                       {resolution:=optional}
  org.junit.runner.manipulation          {resolution:=optional}
  org.junit.runner.notification          {resolution:=optional}
  org.tukaani.xz                         {resolution:=optional}
  org.w3c.dom                            {resolution:=optional}
  org.xml.sax                            {resolution:=optional}
  org.xml.sax.helpers                    {resolution:=optional}
  sun.rmi.rmic                           {resolution:=optional}
  sun.tools.javac                        {resolution:=optional}
  sun.tools.native2ascii                 {resolution:=optional}
  weblogic                               {resolution:=optional}

Export-Package
  org.apache.tools.ant                   {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.attribute         {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.dispatch          {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.filters           {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.filters.util      {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.helper            {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.input             {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.launch            {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.listener          {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.loader            {version=1.10.15}
  org.apache.tools.ant.property          {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs          {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.compilers {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.condition {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.cvslib   {version=1.10.15}
  org.apache.tools.ant.taskdefs.email    {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.launcher {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.modules  {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.ccm {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.clearcase {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.depend {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.depend.constantpool {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.ejb {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.extension {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.extension.resolvers {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.i18n {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.image {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.j2ee {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.javacc {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.javah {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.jdepend {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.jlink {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.jsp {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.jsp.compilers {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.junit {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.junit.xsl {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.junitlauncher {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.junitlauncher.confined {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.native2ascii {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.net {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.taskdefs.optional.pvcs {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.script {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.sos {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.sound {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.splash {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.ssh {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.testing {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.unix {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.vss {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.windows {version=1.10.15}
  org.apache.tools.ant.taskdefs.optional.xz {version=1.10.15}
  org.apache.tools.ant.taskdefs.rmic     {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types             {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.conditions  {version=1.10.15}
  org.apache.tools.ant.types.mappers     {version=1.10.15}
  org.apache.tools.ant.types.optional    {version=1.10.15}
  org.apache.tools.ant.types.optional.depend {version=1.10.15}
  org.apache.tools.ant.types.optional.imageio {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.optional.xz {version=1.10.15}
  org.apache.tools.ant.types.resolver    {version=1.10.15}
  org.apache.tools.ant.types.resources   {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.resources.comparators {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.resources.selectors {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.selectors   {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.selectors.modifiedselector {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.types.spi         {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util              {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util.depend       {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util.depend.bcel  {version=1.10.15}
  org.apache.tools.ant.util.facade       {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util.java15       {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util.optional     {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.ant.util.regexp       {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.bzip2                 {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.mail                  {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.tar                   {version=1.10.15, imported-as=[1.10,2)}
  org.apache.tools.zip                   {version=1.10.15, imported-as=[1.10,2)}

[CAPABILITIES]

Require-Capability
  osgi.ee                                {filter:=(&(osgi.ee=JavaSE)(version=1.8))}

[COMPONENTS]



[METATYPE]



[API USES]


[USES]



[USEDBY]



[LIST]


  CONTRIBUTORS extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018009067254074FCDA019067254074FCDA019067254074FCDA01'
  INSTALL extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018009067254074FCDA019067254074FCDA019067254074FCDA01'
  KEYS extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180060F2244074FCDA0160F2244074FCDA0160F2244074FCDA01'
  LICENSE extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180050CB244074FCDA0150CB244074FCDA0150CB244074FCDA01'
  NOTICE extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180050CB244074FCDA0150CB244074FCDA0150CB244074FCDA01'
  README extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180040A4244074FCDA0140A4244074FCDA0140A4244074FCDA01'
  WHATSNEW extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180090F6224074FCDA0190F6224074FCDA0190F6224074FCDA01'
  contributors.xml extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080CF224074FCDA0180CF224074FCDA0180CF224074FCDA01'
  fetch.xml extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080CF224074FCDA0180CF224074FCDA0180CF224074FCDA01'
  get-m2.xml extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070A8224074FCDA0170A8224074FCDA0170A8224074FCDA01'
  patch.xml extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018006081224074FCDA016081224074FCDA016081224074FCDA01'
META-INF
  MANIFEST.MF
bin
  ant extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180050E2354074FCDA0150E2354074FCDA0150E2354074FCDA01'
  ant.bat extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003094354074FCDA013094354074FCDA013094354074FCDA01'
  ant.cmd extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003094354074FCDA013094354074FCDA013094354074FCDA01'
  antRun extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180050E2354074FCDA0150E2354074FCDA0150E2354074FCDA01'
  antRun.bat extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003094354074FCDA013094354074FCDA013094354074FCDA01'
  antRun.pl extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180040BB354074FCDA0140BB354074FCDA0140BB354074FCDA01'
  antenv.cmd extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003094354074FCDA013094354074FCDA013094354074FCDA01'
  complete-ant-cmd.pl extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180040BB354074FCDA0140BB354074FCDA0140BB354074FCDA01'
  envset.cmd extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800206D354074FCDA01206D354074FCDA01206D354074FCDA01'
  lcp.bat extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800206D354074FCDA01206D354074FCDA01206D354074FCDA01'
  runant.pl extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180040BB354074FCDA0140BB354074FCDA0140BB354074FCDA01'
  runant.py extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180040BB354074FCDA0140BB354074FCDA0140BB354074FCDA01'
  runrc.cmd extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800206D354074FCDA01206D354074FCDA01206D354074FCDA01'
etc
  ant-bootstrap.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800001F354074FCDA01001F354074FCDA01001F354074FCDA01'
  changelog.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800F0F7344074FCDA01F0F7344074FCDA01F0F7344074FCDA01'
  coverage-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800E0D0344074FCDA01E0D0344074FCDA01E0D0344074FCDA01'
  jdepend-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800E0D0344074FCDA01E0D0344074FCDA01E0D0344074FCDA01'
  jdepend.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800D0A9344074FCDA01D0A9344074FCDA01D0A9344074FCDA01'
  junit-frames-xalan1.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800C082344074FCDA01C082344074FCDA01C082344074FCDA01'
  junit-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800C082344074FCDA01C082344074FCDA01C082344074FCDA01'
  junit-noframes.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B05B344074FCDA01B05B344074FCDA01B05B344074FCDA01'
  log.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B05B344074FCDA01B05B344074FCDA01B05B344074FCDA01'
  maudit-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A034344074FCDA01A034344074FCDA01A034344074FCDA01'
  mmetrics-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800900D344074FCDA01900D344074FCDA01900D344074FCDA01'
  tagdiff.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800900D344074FCDA01900D344074FCDA01900D344074FCDA01'
etc/checkstyle
  checkstyle-frames-sortby-check.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800206D354074FCDA01206D354074FCDA01206D354074FCDA01'
  checkstyle-frames.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018001046354074FCDA011046354074FCDA011046354074FCDA01'
  checkstyle-text.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018001046354074FCDA011046354074FCDA011046354074FCDA01'
  checkstyle-xdoc.xsl extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018001046354074FCDA011046354074FCDA011046354074FCDA01'
lib
  README extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080E6334074FCDA0180E6334074FCDA0180E6334074FCDA01'
  ant-antlr.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080E6334074FCDA0180E6334074FCDA0180E6334074FCDA01'
  ant-antlr.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080E6334074FCDA0180E6334074FCDA0180E6334074FCDA01'
  ant-apache-bcel.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070BF334074FCDA0170BF334074FCDA0170BF334074FCDA01'
  ant-apache-bcel.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070BF334074FCDA0170BF334074FCDA0170BF334074FCDA01'
  ant-apache-bsf.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070BF334074FCDA0170BF334074FCDA0170BF334074FCDA01'
  ant-apache-bsf.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070BF334074FCDA0170BF334074FCDA0170BF334074FCDA01'
  ant-apache-log4j.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018006098334074FCDA016098334074FCDA016098334074FCDA01'
  ant-apache-log4j.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018006098334074FCDA016098334074FCDA016098334074FCDA01'
  ant-apache-oro.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018006098334074FCDA016098334074FCDA016098334074FCDA01'
  ant-apache-oro.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018005071334074FCDA015071334074FCDA015071334074FCDA01'
  ant-apache-regexp.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800404A334074FCDA01404A334074FCDA01404A334074FCDA01'
  ant-apache-regexp.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800404A334074FCDA01404A334074FCDA01404A334074FCDA01'
  ant-apache-resolver.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800404A334074FCDA01404A334074FCDA01404A334074FCDA01'
  ant-apache-resolver.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003023334074FCDA013023334074FCDA013023334074FCDA01'
  ant-apache-xalan2.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003023334074FCDA013023334074FCDA013023334074FCDA01'
  ant-apache-xalan2.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003023334074FCDA013023334074FCDA013023334074FCDA01'
  ant-commons-logging.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018003023334074FCDA013023334074FCDA013023334074FCDA01'
  ant-commons-logging.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180020FC324074FCDA0120FC324074FCDA0120FC324074FCDA01'
  ant-commons-net.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180000AE324074FCDA0100AE324074FCDA0100AE324074FCDA01'
  ant-commons-net.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180000AE324074FCDA0100AE324074FCDA0100AE324074FCDA01'
  ant-imageio.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800F086324074FCDA01F086324074FCDA01F086324074FCDA01'
  ant-imageio.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800E05F324074FCDA01E05F324074FCDA01E05F324074FCDA01'
  ant-jakartamail.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800C011324074FCDA01C011324074FCDA01C011324074FCDA01'
  ant-jakartamail.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800C011324074FCDA01C011324074FCDA01C011324074FCDA01'
  ant-javamail.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B0EA314074FCDA01B0EA314074FCDA01B0EA314074FCDA01'
  ant-javamail.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B0EA314074FCDA01B0EA314074FCDA01B0EA314074FCDA01'
  ant-jdepend.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B0EA314074FCDA01B0EA314074FCDA01B0EA314074FCDA01'
  ant-jdepend.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A0C3314074FCDA01A0C3314074FCDA01A0C3314074FCDA01'
  ant-jmf.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A0C3314074FCDA01A0C3314074FCDA01A0C3314074FCDA01'
  ant-jmf.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800909C314074FCDA01909C314074FCDA01909C314074FCDA01'
  ant-jsch.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018008075314074FCDA018075314074FCDA018075314074FCDA01'
  ant-jsch.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800704E314074FCDA01704E314074FCDA01704E314074FCDA01'
  ant-junit.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800208B304074FCDA01208B304074FCDA01208B304074FCDA01'
  ant-junit.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800208B304074FCDA01208B304074FCDA01208B304074FCDA01'
  ant-junit4.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018001064304074FCDA011064304074FCDA011064304074FCDA01'
  ant-junit4.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018001064304074FCDA011064304074FCDA011064304074FCDA01'
  ant-junitlauncher.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800D0C72F4074FCDA01D0C72F4074FCDA01D0C72F4074FCDA01'
  ant-junitlauncher.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800D0C72F4074FCDA01D0C72F4074FCDA01D0C72F4074FCDA01'
  ant-launcher.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800C0A02F4074FCDA01C0A02F4074FCDA01C0A02F4074FCDA01'
  ant-launcher.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B0792F4074FCDA01B0792F4074FCDA01B0792F4074FCDA01'
  ant-netrexx.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800B0792F4074FCDA01B0792F4074FCDA01B0792F4074FCDA01'
  ant-netrexx.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A0522F4074FCDA01A0522F4074FCDA01A0522F4074FCDA01'
  ant-parent.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A0522F4074FCDA01A0522F4074FCDA01A0522F4074FCDA01'
  ant-swing.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A0522F4074FCDA01A0522F4074FCDA01A0522F4074FCDA01'
  ant-swing.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800902B2F4074FCDA01902B2F4074FCDA01902B2F4074FCDA01'
  ant-testutil.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080042F4074FCDA0180042F4074FCDA0180042F4074FCDA01'
  ant-testutil.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080042F4074FCDA0180042F4074FCDA0180042F4074FCDA01'
  ant-xz.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180080042F4074FCDA0180042F4074FCDA0180042F4074FCDA01'
  ant-xz.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A002000000000000100180070DD2E4074FCDA0170DD2E4074FCDA0170DD2E4074FCDA01'
  ant.jar extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A08E254074FCDA01A08E254074FCDA01A08E254074FCDA01'
  ant.pom extra='55540D00075E6ED4665E6ED4665E6ED4660A0020000000000001001800A08E254074FCDA01A08E254074FCDA01A08E254074FCDA01'
  libraries.properties extra='55540D00075E6ED4665E6ED4665E6ED4660A00200000000000010018009067254074FCDA019067254074FCDA019067254074FCDA01'

For all we know:

  1. Ant doesn't need junit at all.
  2. Ant works with junit 6.
  3. We dont' have the first clue.

If we need to sovle world hunger first, we'll need to be very very patient...

@laeubi
Copy link
Contributor

laeubi commented Nov 5, 2025

For all we know:

Ant doesn't need junit at all.

Why do we then include ant-junitXXXX bundles in the bundle classpath?

Ant works with junit 6.

Who has ever tested this?

We dont' have the first clue.

of what? I assume the root cause here is that the ant jars have no osgi manifest so bndlib can not knwo whats the version, but of course we can list packages + version ranges for the dependencies that ant uses in its junit parts, that the responsibility of those who wrap a jar and why I always argue to not wrap jars as it puts the burden of checking whats needed to you and often its not easy to guess.

@trancexpress trancexpress changed the title Check for JUnit 5 and 6 conflicts with junit-jupiter-engine and not with junit-platform-engine Remove error dialog for JUnit 5 and 6 conflicts Nov 5, 2025
@trancexpress
Copy link
Contributor Author

Anyway, lets remove the new dialog. We can then take some time to find the right approach.

@trancexpress
Copy link
Contributor Author

Did something break for the build jobs?

 [INFO] [feature] OSGi Test Dependencies 1.0.0-SNAPSHOT .... SUCCESS [  0.175 s]
[INFO] [feature] Eclipse Plug-in Development Environment Spies 1.0.900-SNAPSHOT SUCCESS [  3.476 s]
[INFO] [feature] Eclipse Plug-in Test runner client for UnitTest View (Experimental) 1.0.1200-SNAPSHOT SUCCESS [  4.169 s]
[INFO] [updatesite] repository.eclipse-repository 4.38.0-SNAPSHOT SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  08:42 min
[INFO] Finished at: 2025-11-05T11:23:03Z
[INFO] ------------------------------------------------------------------------
Error:  Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:5.0.1-SNAPSHOT:compile (default-compile) on project org.eclipse.pde.junit.runtime: useJDK = BREE configured, but no toolchain of type 'jdk' with id 'JavaSE-1.8' found. See https://maven.apache.org/guides/mini/guide-using-toolchains.html -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:5.0.1-SNAPSHOT:compile (default-compile) on project org.eclipse.pde.junit.runtime: useJDK = BREE configured, but no toolchain of type 'jdk' with id 'JavaSE-1.8' found. See https://maven.apache.org/guides/mini/guide-using-toolchains.html
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)

@iloveeclipse
Copy link
Member

Did something break for the build jobs?

@laeubi : 262249d ?

@laeubi
Copy link
Contributor

laeubi commented Nov 5, 2025

Did something break for the build jobs?

@laeubi : 262249d ?

Next build should succeed...

@trancexpress
Copy link
Contributor Author

Lets merge @iloveeclipse .

@iloveeclipse iloveeclipse merged commit 4fe820b into eclipse-pde:master Nov 5, 2025
19 checks passed
@HannesWell
Copy link
Member

HannesWell commented Nov 5, 2025

In any case, why an optional bundle import should force a "too high" version of some bundle to be resolved seems mysterious to me.

A user can choose in the run config to include optional requirements and often it is a good thing because many "optionals" are not that optional in reality (remember fragments are also "optional") as they are claimed.

From my experience I can only strongly recommend to not include optional dependencies by default, because of cases like this.
That's also why it's disabled by default for Eclipse product/app launches.
If some dependency is optional then the code must be ready to handle the absence. And if it cannot be absent, then the requirement should be non optional. Of course it can be that the bundle itself can work without that requirement but something else needs it to work with the first bundle. But then that other bundle has to declare a mandatory requirement. E.g. if some bundle is required for a test, then this test should add it as mandatory requirement.

Therefore I think optional dependencies should be ignored by default for new JUnit tests by default.
It looks like I missed the review when this was introduced, but I created a follow-up:

Ant works with junit 6.

Who has ever tested this?

I haven't looked into the details, but I assume it's for the junitlauncher ANT task and friends. And since we probably don't use this in cases like this, I assume the JUnit version actually doesn't matter as that part is not used here.

Anyway, lets remove the new dialog. We can then take some time to find the right approach.

Too bad for the work to create it, but with the current situation I think that's indeed the best way forward.

Thanks for the update.

@laeubi
Copy link
Contributor

laeubi commented Nov 6, 2025

If some dependency is optional then the code must be ready to handle the absence. And if it cannot be absent, then the requirement should be non optional.

For this particular case everything is optional and I really doubt ant is prepared for this. So it does not really "solve" anything and I strongly believe we should fix bad meta-data instead of assume anything is "fixed" by not including optional things because in this case something else is guaranteed to fail here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Show dialog if JUnit 5 plug-in test launch detects unrestricted junit-jupiter-api in plug-in dependencies

5 participants