Description
If I use the "Include required plugins automatically" option I noticed that it does seem to add more than required in some situations.
For example assume a product hat has slf4j.api
and two slf4j provider implementations are in the target then PDE adds another slf4j provider even if one was already chosen in the product, I noticed that when working on
with the product here:
<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>
<product uid="testslf4j" version="1.0.0.qualifier" type="bundles" includeLaunchers="true" autoIncludeRequirements="false">
<configIni use="default">
</configIni>
<launcherArgs>
<programArgs>-console
</programArgs>
<vmArgs>-Declipse.ignoreApp=true
-Dosgi.noShutdown=true
</vmArgs>
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
</vmArgsMac>
</launcherArgs>
<launcher>
<win useIco="false">
<bmp/>
</win>
</launcher>
<vm>
</vm>
<plugins>
<plugin id="my.logging.bundle"/>
<plugin id="org.apache.aries.spifly.dynamic.bundle"/>
<plugin id="org.apache.felix.gogo.command"/>
<plugin id="org.apache.felix.gogo.runtime"/>
<plugin id="org.apache.felix.gogo.shell"/>
<plugin id="org.apache.felix.scr"/>
<plugin id="org.eclipse.equinox.common"/>
<plugin id="org.eclipse.equinox.console"/>
<plugin id="org.eclipse.osgi"/>
<plugin id="org.objectweb.asm"/>
<plugin id="org.objectweb.asm.commons"/>
<plugin id="org.objectweb.asm.tree"/>
<plugin id="org.objectweb.asm.tree.analysis"/>
<plugin id="org.objectweb.asm.util"/>
<plugin id="org.osgi.service.component"/>
<plugin id="org.osgi.util.function"/>
<plugin id="org.osgi.util.promise"/>
<plugin id="slf4j.api"/>
</plugins>
<configurations>
<plugin id="org.apache.aries.spifly.dynamic.bundle" autoStart="true" startLevel="1" />
<plugin id="org.apache.felix.scr" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
<plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
</configurations>
</product>
The product itself is "complete" so works with autoIncludeRequirements="false"
already, no missing requirements are reported when validated. If one starts the product it is getting the expected message:
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
Now I add <plugin id="org.eclipse.equinox.slf4j"/>
and logging works and I get:
id State Bundle
7 ACTIVE org.eclipse.equinox.slf4j_1.0.0.qualifier
17 RESOLVED slf4j.api_2.0.16
if now one activates autoIncludeRequirements="true"
one suddenly gets
id State Bundle
6 RESOLVED slf4j.simple_2.0.16
8 ACTIVE org.eclipse.equinox.slf4j_1.0.0.qualifier
18 RESOLVED slf4j.api_2.0.16
@HannesWell can you take a look as this feature is extremely useful but might confusing in some situations like this.