2014-10-09 61 views
2

我们通过执行java -ea xxx来启用核心Java应用程序中的断言,我也知道如何通过更改命令行选项来启用eclipse中的断言。如何在CQ5/OSGi Bundle(Java)中启用断言?

但是如何在OSGi包中启用断言。我有一个捆绑包,我想测试启用断言,我想在部署时禁用它们(由于缺省情况下禁用了断言,因此禁用会很容易)。但如何启用它?

回答

2

您可以使用ClassLoader#setDefaultAssertionStatus(Boolean)方法。它仅为尚未加载的类设置断言状态。因此,把这种说法最好的地方将是一个包激活:

public class Activator implements BundleActivator { 

    @Override 
    public void start(BundleContext bundleContext) throws Exception { 
     getClass().getClassLoader().setDefaultAssertionStatus(true); 
    } 

    @Override 
    public void stop(BundleContext context) throws Exception { 
    } 
} 

记得在maven-bundle-plugin配置来注册激活:

<project> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <configuration> 
      <instructions> 
      <Bundle-Activator>my.project.Activator</Bundle-Activator> 
... 
+0

嗯,我使用的Eclipse CRXDE,所以我不需要注册激活器。我的Activator将始终处于活动状态。我会试试这个,让你知道。 – Oliver 2014-10-09 12:32:52