This is an automated email from the ASF dual-hosted git repository.

jbonofre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/karaf.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b10e76  [KARAF-5770] OSGi R7 Support
     new 0b83093  Merge pull request #995 from jbonofre/KARAF-5770
8b10e76 is described below

commit 8b10e76169af07ed5fbacb0cb8f305bc6ae2427a
Author: Jean-Baptiste Onofré <[email protected]>
AuthorDate: Mon Nov 18 13:53:33 2019 +0100

    [KARAF-5770] OSGi R7 Support
---
 .../resources/etc/config.properties                | 12 +--
 assemblies/features/static/pom.xml                 |  2 +-
 audit/pom.xml                                      |  1 +
 bundle/core/pom.xml                                |  4 +
 config/pom.xml                                     |  1 +
 deployer/features/pom.xml                          |  4 +
 diagnostic/boot/pom.xml                            |  1 +
 diagnostic/core/pom.xml                            |  1 +
 docker/pom.xml                                     |  1 +
 .../karaf-log-appender-example-core/pom.xml        |  4 +-
 features/core/pom.xml                              |  2 +
 http/pom.xml                                       |  4 +
 instance/pom.xml                                   |  1 +
 .../karaf/instance/resources/etc/config.properties | 12 +--
 .../test/filtered-resources/etc/config.properties  | 12 +--
 .../itests/features/StandardFeaturesTest.java      |  5 --
 jaas/config/pom.xml                                |  1 +
 jaas/jasypt/pom.xml                                |  1 +
 jaas/modules/pom.xml                               |  1 +
 jdbc/pom.xml                                       |  4 +
 jms/pom.xml                                        |  1 +
 jndi/pom.xml                                       |  4 +
 kar/pom.xml                                        |  4 +
 log/pom.xml                                        |  1 +
 .../log/core/internal/LogEventFormatterImpl.java   |  7 +-
 .../log/core/internal/layout/PatternParser.java    | 31 ++++---
 .../karaf/log/core/internal/osgi/Activator.java    | 12 +--
 main/src/main/java/org/apache/karaf/main/Main.java | 18 ++--
 .../test-karaf-home/etc/config.properties          | 39 +++++----
 management/server/pom.xml                          |  1 +
 maven/core/pom.xml                                 |  3 +-
 obr/pom.xml                                        |  4 +
 package/pom.xml                                    |  4 +
 pom.xml                                            | 14 ++--
 profile/pom.xml                                    |  5 ++
 scheduler/pom.xml                                  |  1 +
 service/core/pom.xml                               |  4 +
 service/guard/pom.xml                              |  4 +
 services/eventadmin/pom.xml                        |  1 +
 services/staticcm/pom.xml                          |  4 +
 shell/commands/pom.xml                             |  1 +
 shell/console/pom.xml                              |  1 +
 shell/core/pom.xml                                 |  1 +
 shell/ssh/pom.xml                                  |  1 +
 system/pom.xml                                     |  4 +
 .../java/org/apache/karaf/tooling/RunMojo.java     | 96 +++++++++++++++++++---
 web/pom.xml                                        |  4 +
 webconsole/console/pom.xml                         |  1 +
 wrapper/pom.xml                                    |  1 +
 49 files changed, 259 insertions(+), 87 deletions(-)

diff --git 
a/assemblies/features/base/src/main/filtered-resources/resources/etc/config.properties
 
b/assemblies/features/base/src/main/filtered-resources/resources/etc/config.properties
index d987fc9..859d074 100644
--- 
a/assemblies/features/base/src/main/filtered-resources/resources/etc/config.properties
+++ 
b/assemblies/features/base/src/main/filtered-resources/resources/etc/config.properties
@@ -57,11 +57,11 @@ 
karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/@@felix.f
 # Framework config properties.
 #
 org.osgi.framework.system.packages= \
- org.osgi.dto;version="1.0",\
+ org.osgi.dto;version="1.1",\
  org.osgi.resource;version="1.0",\
  org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\
- org.osgi.framework;version="1.8",\
- org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",\
+ org.osgi.framework;version="1.9",\
+ org.osgi.framework.dto;version="1.9";uses:="org.osgi.dto",\
  org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\
  
org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\
  org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\
@@ -71,13 +71,13 @@ org.osgi.framework.system.packages= \
  org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\
  org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\
  
org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\
- 
org.osgi.framework.wiring.dto;version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",\
+ 
org.osgi.framework.wiring.dto;version="1.3";uses:="org.osgi.dto,org.osgi.resource.dto",\
  
org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\
  
org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\
- org.osgi.service.resolver;version="1.0";uses:="org.osgi.resource",\
+ org.osgi.service.resolver;version="1.1";uses:="org.osgi.resource",\
  org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\
  org.osgi.service.url;version="1.0",\
- org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",\
+ org.osgi.util.tracker;version="1.5.2";uses:="org.osgi.framework",\
  org.apache.karaf.version;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="@@karaf.osgi.version@@",\
diff --git a/assemblies/features/static/pom.xml 
b/assemblies/features/static/pom.xml
index 3f8d7cf..adefef5 100644
--- a/assemblies/features/static/pom.xml
+++ b/assemblies/features/static/pom.xml
@@ -52,7 +52,7 @@
         </dependency>
         <dependency>
             <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-service</artifactId>
+            <artifactId>pax-logging-log4j1</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.services</groupId>
diff --git a/audit/pom.xml b/audit/pom.xml
index ebbb568..627a3cb 100644
--- a/audit/pom.xml
+++ b/audit/pom.xml
@@ -104,6 +104,7 @@
                         <Export-Package>
                         </Export-Package>
                         <Import-Package>
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/bundle/core/pom.xml b/bundle/core/pom.xml
index 9f2e2f2..4ea04a9 100644
--- a/bundle/core/pom.xml
+++ b/bundle/core/pom.xml
@@ -126,6 +126,10 @@
                         <Export-Package>
                             org.apache.karaf.bundle.core;-noimport:=true
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.bundle.command*,
                             org.apache.karaf.bundle.core.internal,
diff --git a/config/pom.xml b/config/pom.xml
index c5b3054..83910e8 100644
--- a/config/pom.xml
+++ b/config/pom.xml
@@ -106,6 +106,7 @@
                         </Export-Package>
                         <Import-Package>
                             org.osgi.service.metatype;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/deployer/features/pom.xml b/deployer/features/pom.xml
index ffc8d34..3b75fb3 100644
--- a/deployer/features/pom.xml
+++ b/deployer/features/pom.xml
@@ -101,6 +101,10 @@
                 <configuration>
                     <instructions>
                         <Export-Package />
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.deployer.features,
                             org.apache.karaf.deployer.features.osgi,
diff --git a/diagnostic/boot/pom.xml b/diagnostic/boot/pom.xml
index 711e8b4..0e9a255 100644
--- a/diagnostic/boot/pom.xml
+++ b/diagnostic/boot/pom.xml
@@ -65,6 +65,7 @@
                         <Import-Package>
                             com.sun.management;resolution:=optional,
                             sun.misc;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Karaf-Activator>
diff --git a/diagnostic/core/pom.xml b/diagnostic/core/pom.xml
index 792e5e4..28c9ca7 100644
--- a/diagnostic/core/pom.xml
+++ b/diagnostic/core/pom.xml
@@ -105,6 +105,7 @@
                                </Export-Package>
                         <Import-Package>
                             com.sun.management*;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/docker/pom.xml b/docker/pom.xml
index 07daefc..4c0e9f0 100644
--- a/docker/pom.xml
+++ b/docker/pom.xml
@@ -99,6 +99,7 @@
                         </Export-Package>
                         <Import-Package>
                             com.fasterxml.jackson*;version="[2,3)",
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git 
a/examples/karaf-log-appender-example/karaf-log-appender-example-core/pom.xml 
b/examples/karaf-log-appender-example/karaf-log-appender-example-core/pom.xml
index f9d296f..b77a3a6 100644
--- 
a/examples/karaf-log-appender-example/karaf-log-appender-example-core/pom.xml
+++ 
b/examples/karaf-log-appender-example/karaf-log-appender-example-core/pom.xml
@@ -35,7 +35,7 @@
     <dependencies>
         <dependency>
             <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-service</artifactId>
+            <artifactId>pax-logging-log4j1</artifactId>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
@@ -52,7 +52,7 @@
                 <configuration>
                     <instructions>
                         <Import-Package>
-                            org.ops4j.pax.logging*;version="[1.7,2)",
+                            org.ops4j.pax.logging*;version="[1,3)",
                             *
                         </Import-Package>
                     </instructions>
diff --git a/features/core/pom.xml b/features/core/pom.xml
index 846e9f6..9ac559d 100644
--- a/features/core/pom.xml
+++ b/features/core/pom.xml
@@ -166,6 +166,8 @@
                         <Import-Package>
                             !org.eclipse.osgi.service.resolver,
                             javax.xml.bind*;version="[2.2,3)",
+                            org.osgi.framework*;version="[1,3)",
+                            org.osgi.service.resolver;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/http/pom.xml b/http/pom.xml
index 94ae1ac..15bc744 100644
--- a/http/pom.xml
+++ b/http/pom.xml
@@ -110,6 +110,10 @@
                         <Export-Package>
                             org.apache.karaf.http.core
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             
org.apache.karaf.util.tracker;-split-package:=merge-first,
                             org.apache.karaf.http.command,
diff --git a/instance/pom.xml b/instance/pom.xml
index e8aaa6f..76d6779 100644
--- a/instance/pom.xml
+++ b/instance/pom.xml
@@ -208,6 +208,7 @@
                         <Import-Package>
                             !org.apache.karaf.shell.impl.action.command,
                             !org.apache.karaf.instance.core.internal,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git 
a/instance/src/main/resources/org/apache/karaf/instance/resources/etc/config.properties
 
b/instance/src/main/resources/org/apache/karaf/instance/resources/etc/config.properties
index d8b1f95..629111c 100644
--- 
a/instance/src/main/resources/org/apache/karaf/instance/resources/etc/config.properties
+++ 
b/instance/src/main/resources/org/apache/karaf/instance/resources/etc/config.properties
@@ -57,11 +57,11 @@ 
karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/@@felix.f
 # Framework config properties.
 #
 org.osgi.framework.system.packages= \
- org.osgi.dto;version="1.0",\
+ org.osgi.dto;version="1.1",\
  org.osgi.resource;version="1.0",\
  org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\
- org.osgi.framework;version="1.8",\
- org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",\
+ org.osgi.framework;version="1.9",\
+ org.osgi.framework.dto;version="1.9";uses:="org.osgi.dto",\
  org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\
  
org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\
  org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\
@@ -71,13 +71,13 @@ org.osgi.framework.system.packages= \
  org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\
  org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\
  
org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\
- 
org.osgi.framework.wiring.dto;version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",\
+ 
org.osgi.framework.wiring.dto;version="1.3";uses:="org.osgi.dto,org.osgi.resource.dto",\
  
org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\
  
org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\
- org.osgi.service.resolver;version="1.0";uses:="org.osgi.resource",\
+ org.osgi.service.resolver;version="1.1";uses:="org.osgi.resource",\
  org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\
  org.osgi.service.url;version="1.0",\
- org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",\
+ org.osgi.util.tracker;version="1.5.2";uses:="org.osgi.framework",\
  org.apache.karaf.version;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="@@karaf.osgi.version@@",\
diff --git a/itests/test/src/test/filtered-resources/etc/config.properties 
b/itests/test/src/test/filtered-resources/etc/config.properties
index a563ca5..1ea7b7b 100644
--- a/itests/test/src/test/filtered-resources/etc/config.properties
+++ b/itests/test/src/test/filtered-resources/etc/config.properties
@@ -57,11 +57,11 @@ 
karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/@@felix.f
 # Framework config properties.
 #
 org.osgi.framework.system.packages= \
- org.osgi.dto;version="1.0",\
+ org.osgi.dto;version="1.1",\
  org.osgi.resource;version="1.0",\
  org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\
- org.osgi.framework;version="1.8",\
- org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",\
+ org.osgi.framework;version="1.9",\
+ org.osgi.framework.dto;version="1.9";uses:="org.osgi.dto",\
  org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\
  
org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\
  org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\
@@ -71,13 +71,13 @@ org.osgi.framework.system.packages= \
  org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\
  org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\
  
org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\
- 
org.osgi.framework.wiring.dto;version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",\
+ 
org.osgi.framework.wiring.dto;version="1.3";uses:="org.osgi.dto,org.osgi.resource.dto",\
  
org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\
  
org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\
- org.osgi.service.resolver;version="1.0";uses:="org.osgi.resource",\
+ org.osgi.service.resolver;version="1.1";uses:="org.osgi.resource",\
  org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\
  org.osgi.service.url;version="1.0",\
- org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",\
+ org.osgi.util.tracker;version="1.5.2";uses:="org.osgi.framework",\
  org.apache.karaf.version;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="@@karaf.osgi.version@@",\
  
org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="@@karaf.osgi.version@@",\
diff --git 
a/itests/test/src/test/java/org/apache/karaf/itests/features/StandardFeaturesTest.java
 
b/itests/test/src/test/java/org/apache/karaf/itests/features/StandardFeaturesTest.java
index 11659bf..c12a269 100644
--- 
a/itests/test/src/test/java/org/apache/karaf/itests/features/StandardFeaturesTest.java
+++ 
b/itests/test/src/test/java/org/apache/karaf/itests/features/StandardFeaturesTest.java
@@ -45,11 +45,6 @@ public class StandardFeaturesTest extends BaseTest {
         assertFeatureInstalled("service");
         assertFeatureInstalled("system");
     }
-       
-    @Test
-    public void installFrameworkSecurityFeature() throws Exception {
-        installAssertAndUninstallFeatures("framework-security");
-    }
 
     public void installServiceSecurityFeature() throws Exception {
         System.out.println("===>installServiceSecurityFeature");
diff --git a/jaas/config/pom.xml b/jaas/config/pom.xml
index 93ee079..b526dfe 100644
--- a/jaas/config/pom.xml
+++ b/jaas/config/pom.xml
@@ -103,6 +103,7 @@
                         </Export-Package>
                         <Import-Package>
                             !${project.artifactId}.*,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/jaas/jasypt/pom.xml b/jaas/jasypt/pom.xml
index 03a77b3..3dcccdd 100644
--- a/jaas/jasypt/pom.xml
+++ b/jaas/jasypt/pom.xml
@@ -147,6 +147,7 @@
                 <configuration>
                     <instructions>
                         <Import-Package>
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/jaas/modules/pom.xml b/jaas/modules/pom.xml
index 8fa78c5..7ed5184 100644
--- a/jaas/modules/pom.xml
+++ b/jaas/modules/pom.xml
@@ -166,6 +166,7 @@
                             javax.net,
                             org.apache.karaf.jaas.config,
                             org.osgi.service.event;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             !net.sf.ehcache*,
                             !net.spy.memcached*,
                             com.sun.security.auth.module;resolution:=optional,
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
index e834422..ef739b3 100644
--- a/jdbc/pom.xml
+++ b/jdbc/pom.xml
@@ -89,6 +89,10 @@
                         <Export-Package>
                             org.apache.karaf.jdbc
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.jdbc.command,
                             org.apache.karaf.jdbc.command.ds,
diff --git a/jms/pom.xml b/jms/pom.xml
index e8b10da..3bc09be 100644
--- a/jms/pom.xml
+++ b/jms/pom.xml
@@ -113,6 +113,7 @@
                         <Import-Package>
                             javax.jms;version="[1.1,3)",
                             org.apache.activemq*;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/jndi/pom.xml b/jndi/pom.xml
index f2d9b69..6617afc 100644
--- a/jndi/pom.xml
+++ b/jndi/pom.xml
@@ -92,6 +92,10 @@
                         <Export-Package>
                             org.apache.karaf.jndi
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.jndi.command,
                             org.apache.karaf.jndi.command.completers,
diff --git a/kar/pom.xml b/kar/pom.xml
index 7e1a5fa..a38694f 100644
--- a/kar/pom.xml
+++ b/kar/pom.xml
@@ -113,6 +113,10 @@
                         <Export-Package>
                             org.apache.karaf.kar
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.kar.command,
                             org.apache.karaf.kar.command.completers,
diff --git a/log/pom.xml b/log/pom.xml
index 62c7f50..04b5999 100644
--- a/log/pom.xml
+++ b/log/pom.xml
@@ -108,6 +108,7 @@
                             org.apache.karaf.log.core
                         </Export-Package>
                         <Import-Package>
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git 
a/log/src/main/java/org/apache/karaf/log/core/internal/LogEventFormatterImpl.java
 
b/log/src/main/java/org/apache/karaf/log/core/internal/LogEventFormatterImpl.java
index 5709b6b..c7f7ffd 100644
--- 
a/log/src/main/java/org/apache/karaf/log/core/internal/LogEventFormatterImpl.java
+++ 
b/log/src/main/java/org/apache/karaf/log/core/internal/LogEventFormatterImpl.java
@@ -23,17 +23,18 @@ import org.apache.karaf.log.core.LogEventFormatter;
 import org.apache.karaf.log.core.internal.layout.PatternConverter;
 import org.apache.karaf.log.core.internal.layout.PatternParser;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
+import org.osgi.service.log.LogLevel;
 
 public class LogEventFormatterImpl implements LogEventFormatter {
 
     private String pattern;
-    private Map<Integer, String> level2Color = new HashMap<>();
+    private Map<LogLevel, String> level2Color = new HashMap<>();
 
     public void setPattern(String pattern) {
         this.pattern = pattern;
     }
 
-    public void setColor(int level, String color) {
+    public void setColor(LogLevel level, String color) {
         if (color != null && color.length() > 0) {
             this.level2Color.put(level, color);
         } else {
@@ -73,7 +74,7 @@ public class LogEventFormatterImpl implements 
LogEventFormatter {
 
     private String getColor(PaxLoggingEvent event, boolean noColor) {
         if (!noColor && event != null && event.getLevel() != null && 
event.getLevel().toString() != null) {
-            return level2Color.get(event.getLevel().toInt());
+            return level2Color.get(event.getLevel());
         } else {
             return null;
         }
diff --git 
a/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
 
b/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
index b69fa1d..03b0e16 100644
--- 
a/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
+++ 
b/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import org.ops4j.pax.logging.PaxLogger;
 import org.ops4j.pax.logging.spi.PaxLocationInfo;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
+import org.osgi.service.log.LogLevel;
 
 /**
  * Copied from log4j
@@ -559,22 +560,20 @@ public class PatternParser {
     public
     String convert(PaxLoggingEvent event) {
       String s;
-      switch (event.getLevel().toInt()) {
-        case PaxLogger.LEVEL_TRACE:
-          s = "trace";
-          break;
-        case PaxLogger.LEVEL_DEBUG:
-          s = "debug";
-          break;
-        case PaxLogger.LEVEL_INFO:
-          s = "info";
-          break;
-        case PaxLogger.LEVEL_WARNING:
-          s = "warn";
-          break;
-        default:
-          s = "error";
-          break;
+      if (event.getLevel().toLevel().equals(LogLevel.TRACE)) {
+        s = "trace";
+      } else if (event.getLevel().toLevel().equals(LogLevel.DEBUG)) {
+        s = "debug";
+      } else if (event.getLevel().toLevel().equals(LogLevel.INFO)) {
+        s = "info";
+      } else if (event.getLevel().toLevel().equals(LogLevel.WARN)) {
+        s = "warn";
+      } else if (event.getLevel().toLevel().equals(LogLevel.ERROR)) {
+        s = "error";
+      } else if (event.getLevel().toLevel().equals(LogLevel.AUDIT)) {
+        s = "audit";
+      } else {
+        s = "error";
       }
       String str = style.get(s);
       if (str != null) {
diff --git 
a/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java 
b/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java
index f47b456..d1677ea 100644
--- a/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java
+++ b/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java
@@ -32,6 +32,7 @@ import org.ops4j.pax.logging.PaxLogger;
 import org.ops4j.pax.logging.spi.PaxAppender;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ManagedService;
+import org.osgi.service.log.LogLevel;
 
 @Services(
         requires = @RequireService(ConfigurationAdmin.class),
@@ -56,11 +57,12 @@ public class Activator extends BaseActivator implements 
ManagedService {
 
         LogEventFormatterImpl formatter = new LogEventFormatterImpl();
         formatter.setPattern(pattern);
-        formatter.setColor(PaxLogger.LEVEL_ERROR, errorColor);
-        formatter.setColor(PaxLogger.LEVEL_WARNING, warnColor);
-        formatter.setColor(PaxLogger.LEVEL_INFO, infoColor);
-        formatter.setColor(PaxLogger.LEVEL_DEBUG, debugColor);
-        formatter.setColor(PaxLogger.LEVEL_TRACE, traceColor);
+        formatter.setColor(LogLevel.ERROR, errorColor);
+        formatter.setColor(LogLevel.WARN, warnColor);
+        formatter.setColor(LogLevel.INFO, infoColor);
+        formatter.setColor(LogLevel.DEBUG, debugColor);
+        formatter.setColor(LogLevel.TRACE, traceColor);
+        formatter.setColor(LogLevel.AUDIT, traceColor);
         register(LogEventFormatter.class, formatter);
 
         LogServiceImpl logService = new LogServiceImpl(configurationAdmin, 
size);
diff --git a/main/src/main/java/org/apache/karaf/main/Main.java 
b/main/src/main/java/org/apache/karaf/main/Main.java
index 30d2670..d9ee3c8 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -91,7 +91,8 @@ public class Main {
     private volatile boolean exiting;
     private AutoCloseable shutdownThread;
     private Thread monitorThread;
-    
+    private URLClassLoader classLoader;
+
     /**
      * <p>
      * This method performs the main task of constructing an framework instance
@@ -252,7 +253,7 @@ public class Main {
         ArtifactResolver resolver = new SimpleMavenResolver(bundleDirs);
 
         // Start up the OSGI framework
-        ClassLoader classLoader = createClassLoader(resolver);
+        classLoader = createClassLoader(resolver);
         FrameworkFactory factory = loadFrameworkFactory(classLoader);
         framework = factory.newFramework(config.props);
 
@@ -480,7 +481,7 @@ public class Main {
         }
     }
 
-    private ClassLoader createClassLoader(ArtifactResolver resolver) throws 
Exception {
+    private URLClassLoader createClassLoader(ArtifactResolver resolver) throws 
Exception {
         List<URL> urls = new ArrayList<>();
         urls.add(resolver.resolve(config.frameworkBundle).toURL());
         File[] libs = new File(config.karafHome, "lib").listFiles();
@@ -491,9 +492,13 @@ public class Main {
                 }
             }
         }
-        return new URLClassLoader(urls.toArray(new URL[urls.size()]), 
Main.class.getClassLoader());
+        return new URLClassLoader(urls.toArray(new URL[0]), 
getParentClassLoader());
     }
-    
+
+    protected ClassLoader getParentClassLoader() {
+        return Main.class.getClassLoader();
+    }
+
     private FrameworkFactory loadFrameworkFactory(ClassLoader classLoader) 
throws Exception {
         String factoryClass = config.frameworkFactoryClass;
         if (factoryClass == null) {
@@ -730,6 +735,9 @@ public class Main {
                 }
                 lock.release();
             }
+            if (classLoader != null) {
+                classLoader.close();
+            }
         }
     }
     
diff --git a/main/src/test/resources/test-karaf-home/etc/config.properties 
b/main/src/test/resources/test-karaf-home/etc/config.properties
index 0684090..23f2171 100755
--- a/main/src/test/resources/test-karaf-home/etc/config.properties
+++ b/main/src/test/resources/test-karaf-home/etc/config.properties
@@ -46,20 +46,31 @@ org.apache.aries.blueprint.synchronous=true
 # Framework config properties.
 #
 org.osgi.framework.system.packages= \
- org.osgi.framework.startlevel;uses:="org.osgi.framework";version="1.0", \
- 
org.osgi.framework.wiring;uses:="org.osgi.resource,org.osgi.framework";version="1.1",
 \
- org.osgi.framework.hooks.bundle;uses:="org.osgi.framework";version="1.1", \
- org.osgi.framework.hooks.service;uses:="org.osgi.framework";version="1.1", \
- 
org.osgi.framework.hooks.resolver;uses:="org.osgi.framework.wiring";version="1.0",
 \
- org.osgi.framework.launch;uses:="org.osgi.framework";version="1.1", \
- org.osgi.framework.namespace;uses:="org.osgi.resource";version="1.0", \
- org.osgi.framework;version="1.7",\
- 
org.osgi.framework.hooks.weaving;uses:="org.osgi.framework.wiring";version="1.0",\
- org.osgi.resource;version="1.0",org.osgi.service.url;version="1.0",\
- org.osgi.service.startlevel;uses:="org.osgi.framework";version="1.1",\
- org.osgi.service.packageadmin;uses:="org.osgi.framework";version="1.2",\
- org.osgi.service.url;version="1.0", \
- org.osgi.util.tracker;uses:="org.osgi.framework";version="1.5.1", \
+ org.osgi.dto;version="1.1",\
+ org.osgi.resource;version="1.0",\
+ org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\
+ org.osgi.framework;version="1.9",\
+ org.osgi.framework.dto;version="1.9";uses:="org.osgi.dto",\
+ org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\
+ 
org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\
+ org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\
+ 
org.osgi.framework.hooks.weaving;version="1.1";uses:="org.osgi.framework.wiring",\
+ org.osgi.framework.launch;version="1.2";uses:="org.osgi.framework",\
+ org.osgi.framework.namespace;version="1.1";uses:="org.osgi.resource",\
+ org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\
+ org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\
+ 
org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\
+ 
org.osgi.framework.wiring.dto;version="1.3";uses:="org.osgi.dto,org.osgi.resource.dto",\
+ 
org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\
+ 
org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\
+ org.osgi.service.resolver;version="1.1";uses:="org.osgi.resource",\
+ org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\
+ org.osgi.service.url;version="1.0",\
+ org.osgi.util.tracker;version="1.5.2";uses:="org.osgi.framework",\
+ org.apache.karaf.version;version="4.3.0.SNAPSHOT",\
+ 
org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="4.3.0.SNAPSHOT",\
+ 
org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="4.3.0.SNAPSHOT",\
+ org.apache.karaf.info;version="4.3.0.SNAPSHOT",\
  ${jre-${java.specification.version}}
 
 org.osgi.framework.system.capabilities= \
diff --git a/management/server/pom.xml b/management/server/pom.xml
index 64d4e2b..8f2e6ee 100644
--- a/management/server/pom.xml
+++ b/management/server/pom.xml
@@ -126,6 +126,7 @@
                         </Export-Package>
                         <Import-Package>
                             org.osgi.service.event*;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             com.sun.jmx.remote.protocol;resolution:=optional,
                             com.sun.jdmk.security.sasl;resolution:=optional,
                             *
diff --git a/maven/core/pom.xml b/maven/core/pom.xml
index 070574c..46e60ab 100644
--- a/maven/core/pom.xml
+++ b/maven/core/pom.xml
@@ -116,7 +116,8 @@
                             !org.eclipse.sisu*,
                             !javax.inject*,
                             !com.google.common.collect,
-                            *,
+                            org.osgi.framework;version="[1,3)",
+                            *
                         </Import-Package>
                         <Private-Package>
                             
org.apache.felix.utils.properties;-split-package:=merge-first,
diff --git a/obr/pom.xml b/obr/pom.xml
index 69eb64f..3f2dd48 100644
--- a/obr/pom.xml
+++ b/obr/pom.xml
@@ -90,6 +90,10 @@
                         <Export-Package>
                             org.apache.karaf.obr.core
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.obr.command,
                             org.apache.karaf.obr.command.util,
diff --git a/package/pom.xml b/package/pom.xml
index 037aa8f..f06fcbc 100644
--- a/package/pom.xml
+++ b/package/pom.xml
@@ -111,6 +111,10 @@
                         <Export-Package>
                             org.apache.karaf.packages.core;-noimport:=true
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.packages.command,
                             org.apache.karaf.packages.core.internal.filter,
diff --git a/pom.xml b/pom.xml
index 57117ee..8e81ea4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -183,7 +183,7 @@
         <easymock.version>4.1</easymock.version>
         <equinox.groupId>org.eclipse.platform</equinox.groupId>
         <equinox.artifactId>org.eclipse.osgi</equinox.artifactId>
-        <equinox.version>3.12.100</equinox.version>
+        <equinox.version>3.15.100</equinox.version>
         <bndlib.version>3.5.0</bndlib.version>
         <equinox.region.version>1.2.101.v20150831-1342</equinox.region.version>
         
<equinox.coordinator.version>1.1.0.v20120522-1841</equinox.coordinator.version>
@@ -193,7 +193,7 @@
         <felix.connect.version>0.2.0</felix.connect.version>
         <felix.coordinator.version>1.0.2</felix.coordinator.version>
         <felix.fileinstall.version>3.6.4</felix.fileinstall.version>
-        <felix.framework.version>5.6.12</felix.framework.version>
+        <felix.framework.version>6.0.3</felix.framework.version>
         
<felix.framework.security.version>2.6.1</felix.framework.security.version>
         <felix.gogo.runtime.version>1.1.2</felix.gogo.runtime.version>
         <felix.gogo.jline.version>1.1.4</felix.gogo.jline.version>
@@ -212,7 +212,7 @@
         <felix.scr.version>2.1.16</felix.scr.version>
         
<felix.scr.webconsole.plugin.version>2.1.0</felix.scr.webconsole.plugin.version>
         <felix.scr.annotation.version>1.12.0</felix.scr.annotation.version>
-        <felix.resolver.version>1.16.0</felix.resolver.version>
+        <felix.resolver.version>2.0.0</felix.resolver.version>
 
         <aries.application.version>1.0.0</aries.application.version>
         <aries.application.api.version>1.0.0</aries.application.api.version>
@@ -275,12 +275,12 @@
         <maven.resolver.version>1.3.1</maven.resolver.version>
         <org.osgi.service.jdbc.version>1.0.0</org.osgi.service.jdbc.version>
         <org.osgi.service.jpa.version>1.0.0</org.osgi.service.jpa.version>
-        <osgi.version>6.0.0</osgi.version>
+        <osgi.version>7.0.0</osgi.version>
         <osgi.compendium.version>6.0.0</osgi.compendium.version>
 
-        <pax.cdi.version>1.1.2</pax.cdi.version>
+        <pax.cdi.version>1.1.3</pax.cdi.version>
         <pax.exam.version>4.13.1</pax.exam.version>
-        <pax.logging.version>1.11.4</pax.logging.version>
+        <pax.logging.version>2.0.2</pax.logging.version>
         <pax.base.version>1.5.1</pax.base.version>
         <pax.swissbox.version>1.8.3</pax.swissbox.version>
         <pax.url.version>2.6.2</pax.url.version>
@@ -1247,7 +1247,7 @@
             </dependency>
             <dependency>
                 <groupId>org.ops4j.pax.logging</groupId>
-                <artifactId>pax-logging-service</artifactId>
+                <artifactId>pax-logging-log4j1</artifactId>
                 <version>${pax.logging.version}</version>
             </dependency>
             <dependency>
diff --git a/profile/pom.xml b/profile/pom.xml
index 7253ed6..d2e6711 100644
--- a/profile/pom.xml
+++ b/profile/pom.xml
@@ -170,6 +170,11 @@
                             org.apache.karaf.profile.command,
                             org.apache.karaf.profile.command.completers,
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            org.osgi.service.resolver;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.profile.assembly,
                             org.apache.karaf.profile.command,
diff --git a/scheduler/pom.xml b/scheduler/pom.xml
index 36932b0..3f27603 100644
--- a/scheduler/pom.xml
+++ b/scheduler/pom.xml
@@ -73,6 +73,7 @@
                             org.jboss.*;resolution:=optional,
                             com.zaxxer.hikari;resolution:=optional,
                             javax.xml.bind*;version="[2.2,3)",
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/service/core/pom.xml b/service/core/pom.xml
index 0a64184..adbbae7 100644
--- a/service/core/pom.xml
+++ b/service/core/pom.xml
@@ -85,6 +85,10 @@
                         <Export-Package>
                             org.apache.karaf.service.core;-noimport:=true
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.service.command,
                             org.apache.karaf.service.core.internal,
diff --git a/service/guard/pom.xml b/service/guard/pom.xml
index 4592ad3..fc2e26e 100644
--- a/service/guard/pom.xml
+++ b/service/guard/pom.xml
@@ -130,6 +130,10 @@
                     <instructions>
                         
<Bundle-Activator>org.apache.karaf.service.guard.impl.Activator</Bundle-Activator>
                         
<Export-Package>org.apache.karaf.service.guard.tools</Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.service.guard.impl,
                             org.apache.karaf.util.jaas
diff --git a/services/eventadmin/pom.xml b/services/eventadmin/pom.xml
index a282ee4..84f1f01 100644
--- a/services/eventadmin/pom.xml
+++ b/services/eventadmin/pom.xml
@@ -70,6 +70,7 @@
                             
org.osgi.service.log;version="[1.3,2)";resolution:=optional,
 
                             <!-- default -->
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Export-Package>org.osgi.service.event</Export-Package>
diff --git a/services/staticcm/pom.xml b/services/staticcm/pom.xml
index 020c65d..4dfb521 100644
--- a/services/staticcm/pom.xml
+++ b/services/staticcm/pom.xml
@@ -53,6 +53,7 @@
                         </DynamicImport-Package>
                         <Import-Package>
                             !org.osgi.service.cm,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         
<Export-Package>org.osgi.service.cm;provider:=true</Export-Package>
@@ -65,6 +66,9 @@
                         <Export-Service>
                             org.osgi.service.cm.ConfigurationAdmin
                         </Export-Service>
+                        <Provide-Capability>
+                            
osgi.implementation;osgi.implementation="osgi.cm";uses:="org.osgi.service.cm,org.apache.karaf.services.staticcm";version:Version="1.6"
+                        </Provide-Capability>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/shell/commands/pom.xml b/shell/commands/pom.xml
index 5a62b0e..866377c 100644
--- a/shell/commands/pom.xml
+++ b/shell/commands/pom.xml
@@ -104,6 +104,7 @@
                         </Export-Package>
                         <Import-Package>
                             com.sun.management;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/shell/console/pom.xml b/shell/console/pom.xml
index e42a094..011d92c 100644
--- a/shell/console/pom.xml
+++ b/shell/console/pom.xml
@@ -154,6 +154,7 @@
                             org.osgi.service.event;resolution:=optional,
                             org.apache.karaf.branding;resolution:=optional,
                             org.apache.sshd.agent*;resolution:=optional,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Export-Package>
diff --git a/shell/core/pom.xml b/shell/core/pom.xml
index 9c37d5b..5c3751b 100644
--- a/shell/core/pom.xml
+++ b/shell/core/pom.xml
@@ -150,6 +150,7 @@
                             org.apache.karaf.branding;resolution:=optional,
                             !org.apache.felix.gogo.jline*,
                             !org.apache.sshd.*,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Export-Package>
diff --git a/shell/ssh/pom.xml b/shell/ssh/pom.xml
index ae30adf..fc38bdd 100644
--- a/shell/ssh/pom.xml
+++ b/shell/ssh/pom.xml
@@ -145,6 +145,7 @@
                 <configuration>
                     <instructions>
                         <Import-Package>
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <Private-Package>
diff --git a/system/pom.xml b/system/pom.xml
index 50ba23b..691f94e 100644
--- a/system/pom.xml
+++ b/system/pom.xml
@@ -97,6 +97,10 @@
                             org.apache.karaf.system,
                             org.apache.karaf.system.management
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.system.commands,
                             org.apache.karaf.system.internal,
diff --git 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
index ae439fe..7cce5e8 100644
--- 
a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
+++ 
b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/RunMojo.java
@@ -48,8 +48,10 @@ import java.lang.reflect.Method;
 import java.net.URI;
 import java.nio.file.Files;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Stream;
 
 /**
  * Run a Karaf instance
@@ -100,6 +102,12 @@ public class RunMojo extends MojoSupport {
     @Parameter(defaultValue = "false")
     private String startSsh = "false";
 
+    /**
+     * Maximum duration startup can take in milliseconds, negative or zero 
values mean no maximum.
+     */
+    @Parameter(defaultValue = "180000")
+    private long maximumStartupDuration;
+
     private static final Pattern mvnPattern = Pattern.compile("mvn:([^/ 
]+)/([^/ ]+)/([^/ ]*)(/([^/ ]+)(/([^/ ]+))?)?");
 
     public void execute() throws MojoExecutionException, MojoFailureException {
@@ -125,25 +133,78 @@ public class RunMojo extends MojoSupport {
         System.setProperty("karaf.startLocalConsole", "false");
         System.setProperty("karaf.startRemoteShell", startSsh);
         System.setProperty("karaf.lock", "false");
-        Main main = new Main(new String[0]);
+
+        String featureBootFinished = BootFinished.class.getName();
+        Thread bootThread = Thread.currentThread();
+        ClassLoader classRealm = bootThread.getContextClassLoader();
+        ClassLoader bootLoader = new ClassLoader(classRealm) {
+            @Override // avoids to use that silently and fail later on in the 
waiting loop
+            protected Class<?> loadClass(final String name, final boolean 
resolve) throws ClassNotFoundException {
+                if (featureBootFinished.equals(name)) {
+                    throw new ClassNotFoundException(
+                            "avoid to use the classrealm loader which will 
prevent felix to match its reference");
+                }
+                return super.loadClass(name, resolve);
+            }
+        };
+        Main main = new Main(new String[0]) {
+            @Override
+            protected ClassLoader getParentClassLoader() {
+                return bootLoader;
+            }
+        };
+
         try {
+            long start = System.nanoTime();
             main.launch();
-            while (main.getFramework().getState() != Bundle.ACTIVE) {
-                Thread.sleep(1000);
+            while (main.getFramework().getState() != Bundle.ACTIVE && 
checkDurationTimeout(start)) {
+                waitForValidState();
             }
-            BundleContext bundleContext = 
main.getFramework().getBundleContext();
+            if (main.getFramework().getState() != Bundle.ACTIVE) {
+                try {
+                    main.destroy();
+                } catch (final Throwable e) {
+                    // ignore it
+                    getLog().debug(e.getMessage(), e);
+                }
+                throw startupTimeout(start);
+            }
+
+            // first find the feature bundle to load the bootfinished class 
properly,
+            // if we use bundleContext0.getBundle() we end up on ClassRealm 
which will not match in ServiceRegImpl
+            BundleContext featureBundleCtx = null;
+
             Object bootFinished = null;
-            while (bootFinished == null) {
-                Thread.sleep(1000);
-                ServiceReference ref = 
bundleContext.getServiceReference(BootFinished.class);
+            while (bootFinished == null && checkDurationTimeout(start)) {
+                waitForValidState();
+                if (featureBundleCtx == null) {
+                    featureBundleCtx = 
Stream.of(main.getFramework().getBundleContext().getBundles())
+                            .filter(b -> 
b.getSymbolicName().equals("org.apache.karaf.deployer.features"))
+                            .findFirst()
+                            .map(Bundle::getBundleContext)
+                            .orElse(null);
+                }
+                if (featureBundleCtx == null) {
+                    continue;
+                }
+                ServiceReference<?> ref = 
featureBundleCtx.getServiceReference(featureBundleCtx.getBundle().loadClass(featureBootFinished));
                 if (ref != null) {
-                    bootFinished = bundleContext.getService(ref);
+                    bootFinished = featureBundleCtx.getService(ref);
                 }
             }
+            if (bootFinished == null) {
+                try {
+                    main.destroy();
+                } catch (final Throwable e) {
+                    // ignore it
+                    getLog().debug(e.getMessage(), e);
+                }
+                throw startupTimeout(start);
+            }
 
-            Object featureService = findFeatureService(bundleContext);
+            Object featureService = findFeatureService(featureBundleCtx);
             addFeatureRepositories(featureService);
-            deploy(bundleContext, featureService);
+            deploy(featureBundleCtx, featureService);
             addFeatures(featureService);
             if (keepRunning)
                 main.awaitShutdown();
@@ -155,6 +216,21 @@ public class RunMojo extends MojoSupport {
         }
     }
 
+    // todo: maybe add it as a mojo parameter to reduce it for light distro?
+    private void waitForValidState() throws InterruptedException {
+        Thread.sleep(1000);
+    }
+
+    private IllegalStateException startupTimeout(final long start) {
+        return new IllegalStateException("Server didn't start in " +
+                TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + 
"ms");
+    }
+
+    private boolean checkDurationTimeout(final long start) {
+        return maximumStartupDuration <= 0 ||
+                TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) < 
maximumStartupDuration;
+    }
+
     void addFeatureRepositories(Object featureService) throws 
MojoExecutionException {
        if (featureRepositories != null) {
             try {
diff --git a/web/pom.xml b/web/pom.xml
index 9773001..6f04643 100644
--- a/web/pom.xml
+++ b/web/pom.xml
@@ -98,6 +98,10 @@
                             org.apache.karaf.web,
                             org.apache.karaf.web.management
                         </Export-Package>
+                        <Import-Package>
+                            org.osgi.framework;version="[1,3)",
+                            *
+                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.web.commands,
                             org.apache.karaf.web.internal,
diff --git a/webconsole/console/pom.xml b/webconsole/console/pom.xml
index 824ffa4..7c96c83 100644
--- a/webconsole/console/pom.xml
+++ b/webconsole/console/pom.xml
@@ -143,6 +143,7 @@
                             !org.osgi.service.metatype,
                             !org.osgi.service.permissionadmin,
                             !org.osgi.service.wireadmin,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                         <DynamicImport-Package>
diff --git a/wrapper/pom.xml b/wrapper/pom.xml
index 5cdc7c4..0bd9c69 100644
--- a/wrapper/pom.xml
+++ b/wrapper/pom.xml
@@ -121,6 +121,7 @@
                             !org.apache.karaf.info,
                             !org.apache.karaf.main,
                             !org.tanukisoftware.wrapper*,
+                            org.osgi.framework;version="[1,3)",
                             *
                         </Import-Package>
                     </instructions>

Reply via email to