>>>>> Brian Demers <brian.demers-re5jqeeqqe8avxtiumw...@public.gmane.org>:


> I gave this a quick try, I added this config to the root pom and rebuilt
> master.  There are still duplicate classes added to shiro-core (from at
> least the "lang" module)
> Any ideas?

Firstly: the config I posted wasn't complete.  What I posted was just
the part related to make it run on projects with packaging jar and war.

I'll post my most recent top-POM pluginManagement below.

Secondly: the only sure way I've found to avoid the duplicate imported
classes issue, is to explicitly list the exported packages.

I've seen this issue mostly when rebundling non-bundle jars.

Here's my most recent parent-POM pluginManagment entry for
maven-bundle-plugin:
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <supportedProjectTypes>
                            <supportedProjectType>jar</supportedProjectType>
                            <supportedProjectType>bundle</supportedProjectType>
                            <supportedProjectType>war</supportedProjectType>
                        </supportedProjectTypes>
                        <instructions>
                            <!-- Enable processing of OSGI DS component 
annotations -->
                            <_dsannotations>*</_dsannotations>
                            <!-- Inherit service injections from base class -->
                            
<_dsannotations-options>inherit</_dsannotations-options>
                            <!-- Enable processing of OSGI metatype annotations 
-->
                            <_metatypeannotations>*</_metatypeannotations>
                        </instructions>
                    </configuration>
                    <executions>
                        <execution>
                            <id>bundle</id>
                            <goals>
                                <goal>bundle</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

The actual <plugins> entry for the service definition module (contains
only interfaces and beans used as parameters and return values) looks
like this:
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
            </plugin>

This enough to get no foreign classes being pulled into the bundle and a
manifest.mf looking like this:
 Manifest-Version: 1.0
 Bnd-LastModified: 1547486363159
 Build-Jdk: 1.8.0_181
 Built-By: sb
 Bundle-ManifestVersion: 2
 Bundle-Name: Handleregistrering OSGi service definitions
 Bundle-SymbolicName: no.priv.bang.handlereg.services
 Bundle-Version: 1.0.0.SNAPSHOT
 Created-By: Apache Maven Bundle Plugin
 Export-Package: no.bang.priv.handlereg.services;uses:="javax.sql";vers
  ion="1.0.0"
 Import-Package: javax.sql
 Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
 Tool: Bnd-3.5.0.201709291849

But I wonder if this is because the package matches the
bundle-symbolicname...?

The bundle-symbolicname is created by combining the groupId and
artifactId in a way that overlaps (the default bundle plugin behaviour
if I remember correctly).

Ie.
    <groupId>no.priv.bang.handlereg</groupId>
    <artifactId>handlereg.services</artifactId>
results in
 Bundle-SymbolicName: no.priv.bang.handlereg.services
and if that also is the package name then everything works
automagically. 

Reply via email to