Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fully automate OSGi metadata creation and implement minor fixes #327

Closed
wants to merge 3 commits into from

Conversation

HannesWell
Copy link
Contributor

@HannesWell HannesWell commented Dec 14, 2022

This is a follow up PR to #324 to only use the maven-bundle-plugin to generate all OSGi metadata into slf4j's Manifest.MF files. This unifies the resulting MANIFEST.MFs that are currently partly generated and partly statically defined and fixes the following aspects:

  • Restore the Bundle-SymbolicName from SLF4J-2.0.5 and before
  • Generate the OSGi 'Service Loader Mediator' capabilities for all SLF4JServiceProviders using BND-Tools
  • Removes Exported-Packages: META-INF.versions.9
  • Restricts the slf4j self import versions to [<current-version>,3)
  • Replace Require-Bundle by Import-Package
  • Add Automatic-Module headers for those artifacts that don't have a module-info.java
  • Replace the deprecated 'Bundle-RequiredExecutionEnvironment' by a corresponding required 'osgi.ee' capability.
  • Fix the package-export of slf4j-jdk-platform-logging (from 'slf4j.jdk.platform.logging' to 'org.slf4j.jdk.platform.logging')
  • Adds the 'Main-Class' header for the migrator artifact again(?)

Some of the fixed issues were introduced with #324 (mainly the changed BSN), some existed before.

I'm currently unsure if it is sufficient to have Import-Package version ranges for the slf4j packages that only contain the minor version (like version="[2.0,3)") or if it should be better also include the current service/micro version in the lower bound (like version="[2.0.7,3)". That latter one is what this PR is currently doing, but the former would be simpler because it is what BND-tools (which the maven-bundle-plugin uses under the hood) is doing by default. However my first impuls would be that a library should never (self-)import a lower version of itself.

@stbischof and @timothyjward you made some OSGi related enhancements of SLF4J in the recent past and are maybe also interested in this change.

@ceki do I have to create a extra ticket for this?

Signed-off-by: Hannes Wellmann <wellmann.hannes1@gmx.net>
@HannesWell
Copy link
Contributor Author

HannesWell commented Dec 14, 2022

Additionally I did a comparison of the Manifest headers in the new artifacts against the SLF4J-2.0.5 release using a little self-written Java-program. The following are the results (the headers Created-By,Originally-Created-By,Build-Jdk-Spec,Tool,Implementation-Version, Bundle-Version are ignored to keep the diffs smaller):

slf4j-api

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-api\target\slf4j-api-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
    Baseline: org.slf4j.spi;version="2.0.5"
  Export-Package
    Local   : org.slf4j.event;version="2.0.7";uses:="org.slf4j,org.slf4j.helpers"
              org.slf4j.helpers;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.spi"
              org.slf4j.spi;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers"
              org.slf4j;version="2.0.7";uses:="org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: org.slf4j.event;version="2.0.5"
              org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Require-Capability
    Local   : osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Baseline: 
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-simple

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-simple\target\slf4j-simple-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.5/slf4j-simple-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="2.0.5"
              org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.simple;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: org.slf4j.simple;version="2.0.5"
  Require-Capability
    Local   : osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Baseline: 
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
Entries missing in local jar
  Require-Bundle: slf4j.api
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-nop

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-nop\target\slf4j-nop-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-nop/2.0.5/slf4j-nop-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="2.0.5"
              org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.nop;version="2.0.7";uses:="org.slf4j,org.slf4j.spi"
    Baseline: org.slf4j.nop;version="2.0.5"
  Require-Capability
    Local   : osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Baseline: 
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-jdk14

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-jdk14\target\slf4j-jdk14-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/2.0.5/slf4j-jdk14-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="2.0.5"
              org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.jul;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: org.slf4j.jul;version="2.0.5"
  Require-Capability
    Local   : osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Baseline: 
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-jdk-platform-logging

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-jdk-platform-logging\target\slf4j-jdk-platform-logging-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk-platform-logging/2.0.5/slf4j-jdk-platform-logging-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.jdk.platform.logging;version="2.0.7"
    Baseline: slf4j.jdk.platform.logging;version="2.0.5"
Entries missing in baseline jar
  Bundle-DocURL: https://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=9))"
Entries missing in local jar
  Require-Bundle: slf4j.api
  Bundle-RequiredExecutionEnvironment: JavaSE-9

slf4j-reload4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-reload4j\target\slf4j-reload4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-reload4j/2.0.5/slf4j-reload4j-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.apache.log4j;version="[1.2,2)"
              org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.apache.log4j
              org.slf4j.event;version="2.0.5"
              org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.reload4j;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: org.slf4j.reload4j;version="2.0.5"
  Require-Capability
    Local   : osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Baseline: 
Entries missing in baseline jar
  Bundle-DocURL: http://reload4j.qos.ch
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-ext

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-ext\target\slf4j-ext-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-ext/2.0.5/slf4j-ext-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.helpers;version="2.0.5"
              org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.cal10n;version="2.0.7";uses:="ch.qos.cal10n,org.slf4j,org.slf4j.ext"
              org.slf4j.ext;version="2.0.7";uses:="org.slf4j"
              org.slf4j.profiler;version="2.0.7";uses:="org.slf4j"
    Baseline: org.slf4j.cal10n;version="2.0.5"
              org.slf4j.ext;version="2.0.5"
              org.slf4j.profiler;version="2.0.5"
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

jcl-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\jcl-over-slf4j\target\jcl-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/jcl-over-slf4j/2.0.5/jcl-over-slf4j-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.apache.commons.logging.impl;version="1.2";uses:="org.apache.commons.logging,org.slf4j,org.slf4j.spi"
    Baseline: org.apache.commons.logging.impl;version="1.2"
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

log4j-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\log4j-over-slf4j\target\log4j-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/log4j-over-slf4j/2.0.5/log4j-over-slf4j-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.spi;version="[1.6.0,3)"
              org.slf4j;version="[1.6.0,3)"
    Baseline: org.slf4j.helpers;version="1.6.0"
              org.slf4j.spi;version="1.6.0"
              org.slf4j;version="1.6.0"
  Export-Package
    Local   : org.apache.log4j.spi;version="1.2.22";uses:="org.apache.log4j"
              org.apache.log4j.xml;version="1.2.22";uses:="org.apache.log4j.spi"
              org.apache.log4j;version="1.2.22";uses:="org.apache.log4j.spi,org.slf4j"
    Baseline: org.apache.log4j.spi;version="1.2.22"
              org.apache.log4j.xml;version="1.2.22"
              org.apache.log4j;version="1.2.22"
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

jul-to-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\jul-to-slf4j\target\jul-to-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/jul-to-slf4j/2.0.5/jul-to-slf4j-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.spi;version="2.0.5"
              org.slf4j;version="2.0.5"
  Export-Package
    Local   : org.slf4j.bridge;version="2.0.7";uses:="org.slf4j,org.slf4j.spi"
    Baseline: org.slf4j.bridge;version="2.0.5";uses:="org.slf4j,org.slf4j.spi"
Entries missing in baseline jar
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
  Implementation-Title: jul-to-slf4j
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

osgi-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\osgi-over-slf4j\target\osgi-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/osgi-over-slf4j/2.0.5/osgi-over-slf4j-2.0.5.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : osgi-over-slf4j
    Baseline: OSGi LogService implemented over SLF4J
  Import-Package
    Local   : org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j;version="2.0.5"
Entries missing in baseline jar
  Automatic-Module-Name: org.slf4j.osgi-over-slf4j
  Bundle-DocURL: http://www.slf4j.org
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
  Bundle-Vendor: SLF4J.ORG
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-migrator

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-migrator\target\slf4j-migrator-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-migrator/2.0.5/slf4j-migrator-2.0.5.jar!/META-INF/MANIFEST.MF'
Entries missing in baseline jar
  Main-Class: org.slf4j.migrator.Main
Entries missing in local jar
  Bundle-Description: SLF4J Migrator
  Multi-Release: true
  X-Compile-Source-JDK: 8
  X-Compile-Target-JDK: 8

@HannesWell
Copy link
Contributor Author

And the same baseline comparison against the SLF4J-2.0.6 release (again ignoring Created-By,Originally-Created-By,Build-Jdk-Spec,Tool,Implementation-Version, Bundle-Version headers):

slf4j-api

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-api\target\slf4j-api-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.6/slf4j-api-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-api
    Baseline: SLF4J API Module
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.event;version="2.0.7";uses:="org.slf4j,org.slf4j.helpers"
              org.slf4j.helpers;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.spi"
              org.slf4j.spi;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers"
              org.slf4j;version="2.0.7";uses:="org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
              org.slf4j.event;version="2.0.6";uses:="org.slf4j,org.slf4j.helpers"
              org.slf4j.helpers;version="2.0.6";uses:="org.slf4j,org.slf4j.event,org.slf4j.spi"
              org.slf4j.spi;version="2.0.6";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers"
              org.slf4j;version="2.0.6";uses:="org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : slf4j.api
    Baseline: org.slf4j.api
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-simple

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-simple\target\slf4j-simple-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/2.0.6/slf4j-simple-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-simple
    Baseline: SLF4J Simple Binding
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.simple;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
              org.slf4j.simple;version="2.0.6";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : slf4j.simple
    Baseline: org.slf4j.simple
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8
  Require-Bundle: slf4j.api

slf4j-nop

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-nop\target\slf4j-nop-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-nop/2.0.6/slf4j-nop-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-nop
    Baseline: SLF4J NOP Binding
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.nop;version="2.0.7";uses:="org.slf4j,org.slf4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
              org.slf4j.nop;version="2.0.6";uses:="org.slf4j,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : slf4j.nop
    Baseline: org.slf4j.nop
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-jdk14

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-jdk14\target\slf4j-jdk14-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk14/2.0.6/slf4j-jdk14-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-jdk14
    Baseline: SLF4J JDK14 Binding
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.jul;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
              org.slf4j.jul;version="2.0.6";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : slf4j.jdk14
    Baseline: org.slf4j.jdk14
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-jdk-platform-logging

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-jdk-platform-logging\target\slf4j-jdk-platform-logging-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-jdk-platform-logging/2.0.6/slf4j-jdk-platform-logging-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-jdk-platform-logging
    Baseline: SLF4J JDK Platform Logging Integration
  Bundle-DocURL
    Local   : https://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.event;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.jdk.platform.logging;version="2.0.7"
    Baseline: org.slf4j.jdk.platform.logging;version="2.0.6"
  Bundle-SymbolicName
    Local   : slf4j.jdk.platform.logging
    Baseline: org.slf4j.jdk-platform-logging
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-9
  Require-Bundle: slf4j.api

slf4j-reload4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-reload4j\target\slf4j-reload4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-reload4j/2.0.6/slf4j-reload4j-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-reload4j
    Baseline: SLF4J Reload4j Binding
  Bundle-DocURL
    Local   : http://reload4j.qos.ch
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.event;version="[2.0.7,3)"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.apache.log4j.spi;version="[1.2,2)"
              org.slf4j.event;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.reload4j;version="2.0.7";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
    Baseline: org.slf4j.reload4j;version="2.0.6";uses:="org.slf4j,org.slf4j.event,org.slf4j.helpers,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : slf4j.reload4j
    Baseline: org.slf4j.reload4j
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-ext

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-ext\target\slf4j-ext-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-ext/2.0.6/slf4j-ext-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : slf4j-ext
    Baseline: SLF4J Extensions Module
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : ch.qos.cal10n;version="0.8.1";resolution:="optional"
              org.slf4j.helpers;version="[2.0.7,3)"
              org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: ch.qos.cal10n;resolution:="optional"
              javassist.bytecode;resolution:="optional"
              javassist;resolution:="optional"
              org.slf4j.ext;version="[2.0,3)"
              org.slf4j.helpers;version="[2.0,3)"
              org.slf4j.instrumentation
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.cal10n;version="2.0.7";uses:="ch.qos.cal10n,org.slf4j,org.slf4j.ext"
              org.slf4j.ext;version="2.0.7";uses:="org.slf4j"
              org.slf4j.profiler;version="2.0.7";uses:="org.slf4j"
    Baseline: org.slf4j.agent;version="2.0.6"
              org.slf4j.cal10n;version="2.0.6";uses:="ch.qos.cal10n,org.slf4j,org.slf4j.ext"
              org.slf4j.ext;version="2.0.6";uses:="org.slf4j"
              org.slf4j.instrumentation;version="2.0.6";uses:="javassist"
              org.slf4j.profiler;version="2.0.6";uses:="org.slf4j"
              org.slf4j;version="2.0.6"
  Bundle-SymbolicName
    Local   : slf4j.ext
    Baseline: org.slf4j.ext
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

jcl-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\jcl-over-slf4j\target\jcl-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/jcl-over-slf4j/2.0.6/jcl-over-slf4j-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : jcl-over-slf4j
    Baseline: JCL 1.2 implemented over SLF4J
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.apache.commons.logging.impl;version="1.2";uses:="org.apache.commons.logging,org.slf4j,org.slf4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
  Bundle-SymbolicName
    Local   : jcl.over.slf4j
    Baseline: org.slf4j.jcl-over-slf4j
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

log4j-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\log4j-over-slf4j\target\log4j-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/log4j-over-slf4j/2.0.6/log4j-over-slf4j-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : log4j-over-slf4j
    Baseline: Log4j Implemented Over SLF4J
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.spi;version="[1.6.0,3)"
              org.slf4j;version="[1.6.0,3)"
    Baseline: javax.xml.parsers
              org.apache.log4j.helpers;version="[1.2,2)"
              org.apache.log4j.spi;version="[1.2,2)"
              org.apache.log4j;version="[1.2,2)"
              org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
              org.w3c.dom
  Export-Package
    Local   : org.apache.log4j.xml;version="1.2.22";uses:="org.apache.log4j.spi"
    Baseline: META-INF.versions.9;version="2.0.6"
              org.apache.log4j.xml;version="1.2.22";uses:="javax.xml.parsers,org.apache.log4j.spi,org.w3c.dom"
  Bundle-SymbolicName
    Local   : log4j.over.slf4j
    Baseline: org.slf4j.log4j-over-slf4j
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

jul-to-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\jul-to-slf4j\target\jul-to-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/jul-to-slf4j/2.0.6/jul-to-slf4j-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : jul-to-slf4j
    Baseline: JUL to SLF4J bridge
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j.spi;version="[2.0.7,3)"
              org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j.spi;version="[2.0,3)"
              org.slf4j;version="[2.0,3)"
  Export-Package
    Local   : org.slf4j.bridge;version="2.0.7";uses:="org.slf4j,org.slf4j.spi"
    Baseline: org.slf4j.bridge;version="2.0.6";uses:="org.slf4j,org.slf4j.spi"
  Bundle-SymbolicName
    Local   : jul.to.slf4j
    Baseline: org.slf4j.jul-to-slf4j
Entries missing in baseline jar
  Implementation-Title: jul-to-slf4j
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

osgi-over-slf4j

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\osgi-over-slf4j\target\osgi-over-slf4j-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/osgi-over-slf4j/2.0.6/osgi-over-slf4j-2.0.6.jar!/META-INF/MANIFEST.MF'
Common Headers with different values
  Bundle-Name
    Local   : osgi-over-slf4j
    Baseline: OSGi LogService implemented over SLF4J
  Bundle-DocURL
    Local   : http://www.slf4j.org
    Baseline: http://www.qos.ch
  Bundle-Vendor
    Local   : SLF4J.ORG
    Baseline: QOS.ch
  Import-Package
    Local   : org.slf4j;version="[2.0.7,3)"
    Baseline: org.slf4j;version="[2.0,3)"
Entries missing in baseline jar
  Automatic-Module-Name: org.slf4j.osgi-over-slf4j
Entries missing in local jar
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8

slf4j-migrator

Load local Manifest from jar 'C:\dev\git\qos-ch.slf4j\slf4j-migrator\target\slf4j-migrator-2.0.7-SNAPSHOT.jar'
Load baseline Manifest from jar 'jar:https://repo1.maven.org/maven2/org/slf4j/slf4j-migrator/2.0.6/slf4j-migrator-2.0.6.jar!/META-INF/MANIFEST.MF'
Entries missing in baseline jar
  Main-Class: org.slf4j.migrator.Main
Entries missing in local jar
  Bundle-Description: SLF4J Migrator
  Bundle-DocURL: http://www.qos.ch
  Bundle-License: http://www.opensource.org/licenses/mit-license.php
  Bundle-ManifestVersion: 2
  Bundle-Name: SLF4J Migrator
  Bundle-SymbolicName: org.slf4j.migrator
  Bundle-Vendor: QOS.ch
  Export-Package: org.slf4j.migrator;uses:="org.slf4j.migrator.line";version="2.0.6",org.slf4j.migrator.line;version="2.0.6",org.slf4j.migrator.helper;uses:="javax.swing";version="2.0.6"
  Import-Package: javax.swing,org.slf4j.migrator.helper,org.slf4j.migrator.line
  Multi-Release: true
  Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
  X-Compile-Source-JDK: 8
  X-Compile-Target-JDK: 8

<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Import-Package>org.slf4j.*;version="$${range;[===,3);${slf4j.api.minimum.compatible.version}}"</Import-Package>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is it really necessary for this artifact to specify a lower bound for the slf4j package.imports of 1.6?

@stbischof
Copy link
Contributor

I highly recommend to NOT use felix maven bundle plugin.

The bnd maven Plugin gives much better support. And Felix just uses bnd.

I also started a pr that uses bnd.this is closed. But the project seems to like management ot the osgi metadata by hand.

@HannesWell
Copy link
Contributor Author

I highly recommend to NOT use felix maven bundle plugin.

The bnd maven Plugin gives much better support. And Felix just uses bnd.

Yes I would like to do that (and even suggested to use the bnd-maven-plugin in the initially mentioned PR), but the bnd-maven-plugin fails to process the multi-release jars for Java-9 that contain a separated modules-info: bndtools/bnd#5346 (comment)

@laeubi
Copy link

laeubi commented Dec 15, 2022

The bnd maven Plugin gives much better support.

To be honest every-time I asked for "support" at BND it ended in disaster complaining that BND is doing all fine and it is just the projects fault not being "enlightened" enough by the glory of BND ... so I can absolutely understand if projects like to use plugins with "less support" that simply work and solve real world development issues.

but the bnd-maven-plugin fails to process the multi-release jars for Java-9 that contain a separated modules-info

I even created PRs with fully working code to fix this specific issue:

but they are delayed for probably NIH or whatever... but I think my idea of MR-JAR support can be applied to Felix as well (even though it would be a bit more to fiddle around to overcome the current limitations of the bnd-Jar implementation) that works as follows:

  1. Create the bnd-jar for project and dependencies
  2. Scan for the versions folder to get all versions of project+dependencies
  3. copy each bnd-jar for each version and strip/replace the versioned items including a default jar
  4. compute each manifest, strip the extranous ones from the versioned manifest and insert these into the original bnd-jar

as this is all just a few loops over in-memorry representation that's quite fast and then Felix could process MR-jars even more comfortable.

@stbischof
Copy link
Contributor

As pointed out in the discussion, it would be usefully to really use bnd and baselining to NOT BREAK the API again.
bndtools/bnd#5477

@HannesWell
Copy link
Contributor Author

I managed to make the bnd-maven-plugin working, the fixupmessages instruction did the trick. @stbischof thanks for that hint (via private chat). Now that the tooling works, can we now please focus on the outcome. :)

I'm currently unsure if it is sufficient to have Import-Package version ranges for the slf4j packages that only contain the minor version (like version="[2.0,3)") or if it should be better also include the current service/micro version in the lower bound (like version="[2.0.7,3)". That latter one is what this PR is currently doing, but the former would be simpler because it is what BND-tools (which the maven-bundle-plugin uses under the hood) is doing by default. However my first impuls would be that a library should never (self-)import a lower version of itself.

Im torn about that point. @laeubi, @stbischof what's your opinion about that?

@ceki from #320 (comment) I assume that you would probably prefer to not use the bnd-annotations to let the bnd-maven-plugin generate the service-mediator capabilities in the Manifest. In my opinion they significantly simply the maintenance of the metadata and since these are build-time dependencies don't add any burden to clients/providers of slf4j.
But in case you insist to not use them I applied them in a second commit, that can be reverted easily in that case. But you can also see from that how the metadata maintenance is simplified. :)

<artifactId>bnd-maven-plugin</artifactId>
<configuration>
<bnd><![CDATA[
Automatic-Module-Name: ${bsn}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Instead of adding Automatic-Module-Name headers, wouldn't it be better to add a regular modules-info.java?
This question applies for the other artifacts, where I added that header as well.

Import-Package: org.slf4j.*;${slf4j_self_import_version}, *
-exportcontents:
Bundle-Activator: org.slf4j.osgi.logservice.impl.Activator
Bundle-Category: osgi
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is that header necessary?

X-Compile-Source-JDK: ${maven.compiler.source}
X-Compile-Target-JDK: ${maven.compiler.target}
Implementation-Version: ${project.version}
Implementation-Title: $[project.artifactId]
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Does anybody know for what those are used?

@laeubi
Copy link

laeubi commented Dec 16, 2022

I managed to make the bnd-maven-plugin working, the fixupmessages instruction did the trick.

This actually just hides the issue than "fix" it see:

what's your opinion about that?

No idea, actually BND should generate this automatically as far as I know, so I would just reuse that.

@HannesWell
Copy link
Contributor Author

I managed to make the bnd-maven-plugin working, the fixupmessages instruction did the trick.

This actually just hides the issue than "fix" it see:

That's right. But since BND (should) not do anything in this regard that let workarund lets the build suceed.

what's your opinion about that?

No idea, actually BND should generate this automatically as far as I know, so I would just reuse that.

By default BND creats imports that only specify Major and minor Version bounds, which leaves room for smaller service Versions. But I would Say a Lob should not self-Import potentially older versions.

@laeubi
Copy link

laeubi commented Dec 16, 2022

But I would Say a Lob should not self-Import potentially older versions.

Why? the contract is that is is compatible for providers, otherwise an import of API would not make much sense if it can only replace the exact version.

@laeubi
Copy link

laeubi commented Dec 16, 2022

That's right. But since BND (should) not do anything in this regard that let workarund lets the build suceed.

I might be confused by as you wrote:

Add Automatic-Module headers for those artifacts that don't have a module-info.java

so I assumed you want to generate those module-info with BND as well...

Only use the maven-bundle-plugin to generate all OSGi metadata into
slf4j's Manifest.MF files. This unifies the resulting MANIFEST.MFs that
are currently partly generated and partly statically defined and fixes
the following aspects:

- Restore the Bundle-SymbolicName from SLF4J-2.0.5 and before
- Removes Exported-Packages: META-INF.versions.9
- Restricts the slf4j self import versions to [<current-version>,3)
- Add Automatic-Module headers for those artifacts that don't have a
module-info.java
- Replace the deprecated 'Bundle-RequiredExecutionEnvironment' by a
corresponding required 'osgi.ee' capability.
- Fix the package-export of slf4j-jdk-platform-logging (from
'slf4j.jdk.platform.logging' to 'org.slf4j.jdk.platform.logging')
- Adds the 'Main-Class' header for the migrator artifact. Because the
Manifest.MF did not have a terminating new-line it was invalid and its
content was ignored!

Signed-off-by: Hannes Wellmann <wellmann.hannes1@gmx.net>
... using bnd-annotation for all SLF4JServiceProvider implementations,
which are loaded using the ServiceLoader mechanism.

Signed-off-by: Hannes Wellmann <wellmann.hannes1@gmx.net>
@HannesWell
Copy link
Contributor Author

But I would Say a Lob should not self-Import potentially older versions.

Why? the contract is that is is compatible for providers, otherwise an import of API would not make much sense if it can only replace the exact version.

I was thinking about the case where a client explicitly imports org.slf4j;version="[2.0.5,3)" (for whatever reason). Now slf4j-api 2.0.5 exports that package in version 2.0.5 and imports it with version="[2.0,3)". Therefore it could theoretically happen, if eg. slf4j-api 2.0.1 is present that slf4j-api-2.0.5 is wired to the package in version 2.0.1 and the therefore the client is using that as well.

But I think in that case the client should either ensure that only the intended version is present in the TP or that at least there are no other (version) restrictions that prevent the OSGi resolver from wiring to the latest version possible. Therefore I just stick with the defaults now.

That's right. But since BND (should) not do anything in this regard that let workarund lets the build suceed.

I might be confused by as you wrote:

Add Automatic-Module headers for those artifacts that don't have a module-info.java

so I assumed you want to generate those module-info with BND as well...

No that was not my goal. But if @ceki is interested and BND supports multi-release jars, that's IMHO something to consider.

@ceki
Copy link
Member

ceki commented Dec 18, 2022

@HannesWell Given new SLF4J packages are added infrequently, automation of OSGi metadata creation is not a priority at this time. Adding a new dependency on "biz.aQute.bnd.annotation" will not fly. As such I am closing this PR without merging.

@ceki ceki closed this Dec 18, 2022
@ceki
Copy link
Member

ceki commented Dec 18, 2022

@HannesWell Notwithstanding the above, thank you very much for this PR.

@HannesWell
Copy link
Contributor Author

@HannesWell Given new SLF4J packages are added infrequently, automation of OSGi metadata creation is not a priority at this time. Adding a new dependency on "biz.aQute.bnd.annotation" will not fly. As such I am closing this PR without merging.

From #320 (which I noticed after creating this PR) I already expected your dislike of using the bnd-annotations in slf4j and therefore updated this PR and extracted the usage of said annotations in a separate commit of this PR.
Please re-open this PR, so I can update it and remove that last commit and still land the the other changes in metadata that come with it. Currently the OSGi metadata are broken mainly because the Bundle-SymbolicName changed since the last release (due to #324) but some slf4j artifacts Require the old bundle name.

This is the full list of enhancements that come with this PR from my initial comment:

  • Restore the Bundle-SymbolicName from SLF4J-2.0.5 and before
  • Generate the OSGi 'Service Loader Mediator' capabilities for all SLF4JServiceProviders using BND-Tools
  • Removes Exported-Packages: META-INF.versions.9
  • Restricts the slf4j self import versions to [<current-version>,3)
  • Replace Require-Bundle by Import-Package
  • Add Automatic-Module headers for those artifacts that don't have a module-info.java
  • Replace the deprecated 'Bundle-RequiredExecutionEnvironment' by a corresponding required 'osgi.ee' capability.
  • Fix the package-export of slf4j-jdk-platform-logging (from 'slf4j.jdk.platform.logging' to 'org.slf4j.jdk.platform.logging')
  • Adds the 'Main-Class' header for the migrator artifact again(?)

You may also want to consider #328 before this one, which contains the very first commit of this PR that only contains the formatting changes.

@stbischof
Copy link
Contributor

@ceki is that an architectural or financial issue?

automation of OSGi metadata creation is not a priority at this time.

@ceki
Copy link
Member

ceki commented Dec 19, 2022

@stbischof Here is a fuller quote:

Given new SLF4J packages are added infrequently, automation of OSGi metadata creation is not a priority at this time.

I don't see the need to fix something which is (at a cursory look) not broken.

@stbischof
Copy link
Contributor

The main benefit for us here is to improve osgi metadata with an automatic build and to secure it with a baseline.

Bnd annotations not required.

And we may are able to sponsor this.

@HannesWell
Copy link
Contributor Author

@stbischof Here is a fuller quote:

Given new SLF4J packages are added infrequently, automation of OSGi metadata creation is not a priority at this time.

I don't see the need to fix something which is (at a cursory look) not broken.

It is currently broken as described in my last comment. Some things were broken recently (the Bundle-SymbolicName), some are broken for a longer time (the Main-Class-entry for the migrator).
And as also said it is no problem to revert the annotations part, but the manifests should be fixed.

Therefore I asked you to reopen this PR to discuss how to make this change fine for you. :)

@ceki
Copy link
Member

ceki commented Dec 19, 2022

@HannesWell Can you please open a new minimal PR and propose changes to just one module, say slf4j-api.

@HannesWell
Copy link
Contributor Author

@HannesWell Can you please open a new PR and propose changes to just one module, say slf4j-api.

Sure I can create a new PR and strip the changes of this one down to the required minimum. But I think it requires more changes to apply it only to sl4j-api module instead of all, especially since almost all modules are affected by in some way.
But I will make a first proposal and we can discuss how to land it.

@HannesWell
Copy link
Contributor Author

Created #330.

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.

None yet

4 participants