[ 
https://issues.apache.org/jira/browse/LOG4J2-345?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Roland Weiglhofer updated LOG4J2-345:
-------------------------------------

    Description: 
Hi all Log4j/OSGi experts!

Yesterday I started to migrate from log4j to log4j2. I replaced all Log4j 1.x 
bundles with log4j-1.2-api as described here: 
http://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html

But I got following error:

Unresolved constraint in bundle MyBundle [21]: Unable to resolve 21.0: missing 
requirement [21.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.apache.log4j)(version>=1.2.0)(!(version>=2.0.0)))

so...I checked the capabilities of the log4j-1.2-api bundle:

g! inspect cap * 11
org.apache.logging.log4j-1.2-api [11] provides:
-----------------------------------------------
osgi.wiring.bundle; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]
osgi.wiring.host; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]

As you can see logging.log4j-1.2-api doesn't export the log4j API 1.2. It still 
requires log4j 1.2. All dependent bundles can not be resolved until I add the 
old log4j.jar.

The maven-bundle-plugin does not export the packages.

Roland 

  was:
Hi all Log4j/OSGi experts!

Yesterday I started to migrate from log4j to log4j2. I replaced all Log4j 1.x 
bundles with log4j-1.2-api as described here: 
http://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html

But I got following error:

Unresolved constraint in bundle MyBundle [21]: Unable to resolve 21.0: missing 
requirement [21.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.apache.log4j)(version>=1.2.0)(!(version>=2.0.0)))

so...I checked the capabilities of the log4j-1.2-api bundle:

g! inspect cap * 11
org.apache.logging.log4j-1.2-api [11] provides:
-----------------------------------------------
osgi.wiring.bundle; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]
osgi.wiring.host; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]

As you can see logging.log4j-1.2-api doesn't export the log4j API 1.2. It still 
requires log4j 1.2. All dependent bundles can not be resolved until I add the 
old log4j.jar.

The maven-bundle-plugin does not export the packages. So, my suggestion for the 
poms is the following:

parent pom

...
  <properties>
    ...
    <osgi.export.log4j1.2>org.apache.log4j;version=1.2</osgi.export.log4j1.2>
  </properties>
...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <_nouses>true</_nouses>
                     
<_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME,JAVA_1_5_HOME,JAVA_1_6_HOME,JAVA_1_7_HOME,JAVA_1_8_HOME,JAVA_1_9_HOME</_removeheaders>
          </instructions>
        </configuration>
      </plugin>
...

log4j12-api pom

...
<packaging>bundle</packaging>
...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <inherited>true</inherited>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>${osgi.symbolicName}</Bundle-SymbolicName>
            <Private-Package>${osgi.private}</Private-Package>
            <Import-Package>${osgi.import},*</Import-Package>
            <DynamicImport-Package>${osgi.dynamicImport}</DynamicImport-Package>
            <Bundle-DocURL>${project.url}</Bundle-DocURL>
            <Export-Package>${osgi.export.log4j1.2}</Export-Package>
          </instructions>
        </configuration>
      </plugin>
...

First, In the parent pom I added <extensions>true</extensions> to include the 
extension of the maven-bundle-plugin. Second, I deleted the manifest-entries 
because the maven-bundle-plugin creates the manifest automatically. In the 
log4j12-api pom I switched to <packaging>bundle</packaging>. By this the 
maven-bundle-plugin creates a jar including a manifest (bundle). I added 
<inherited>true</inherited> to inherit from the parent pom. Finally, I added 
<Export-Package>${osgi.export.log4j1.2}</Export-Package> which exports the api 
and makes it accessable to other bundles.

This should solve the issue but I didn't tested it and it may affect other 
projects.

Roland 

    
> logging.log4j-1.2-api doesn't export the log4j API 1.2. Dependent bundles can 
> not be resolved.
> ----------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-345
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-345
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: log4j 1.2 emulation
>    Affects Versions: 2.0-beta4, 2.0-beta8, 2.0-beta9
>         Environment: OSGi / Apache Felix 4.x
>            Reporter: Roland Weiglhofer
>              Labels: Bundle, Export-Package, Log4j-1.2, Maven-Bundle-Plugin, 
> OSGi, POM
>             Fix For: 2.0-beta9, 2.0
>
>         Attachments: log4j2 1.2api.patch
>
>
> Hi all Log4j/OSGi experts!
> Yesterday I started to migrate from log4j to log4j2. I replaced all Log4j 1.x 
> bundles with log4j-1.2-api as described here: 
> http://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html
> But I got following error:
> Unresolved constraint in bundle MyBundle [21]: Unable to resolve 21.0: 
> missing requirement [21.0] osgi.wiring.package; 
> (&(osgi.wiring.package=org.apache.log4j)(version>=1.2.0)(!(version>=2.0.0)))
> so...I checked the capabilities of the log4j-1.2-api bundle:
> g! inspect cap * 11
> org.apache.logging.log4j-1.2-api [11] provides:
> -----------------------------------------------
> osgi.wiring.bundle; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]
> osgi.wiring.host; org.apache.logging.log4j-1.2-api 2.0.0.beta8 [UNUSED]
> As you can see logging.log4j-1.2-api doesn't export the log4j API 1.2. It 
> still requires log4j 1.2. All dependent bundles can not be resolved until I 
> add the old log4j.jar.
> The maven-bundle-plugin does not export the packages.
> Roland 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to