java - 如何在 CQ5/OSGi Bundle (Java) 中启用断言?

标签 java osgi aem assert osgi-bundle

我们通过执行java -ea xxx在核心java应用程序中启用断言,我也知道如何通过更改命令行选项在eclipse中启用断言。

但是如何在 OSGi 包中启用断言。我有一个 bundle ,我想在启用断言的情况下进行测试,并且我想在部署时禁用它们(禁用很容易,因为默认情况下禁用断言)。但如何启用它呢?

最佳答案

您可以使用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>
...

关于java - 如何在 CQ5/OSGi Bundle (Java) 中启用断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270764/

相关文章:

java - Adobe CQ5 请求参数绑定(bind)

java - 这个算法可行吗?在固定时间段内随机执行时间

maven - maven-bundle-plugin 中的内部错误。嵌入错误 : Opening resource

java - 在纯 Java 中拆分包

tomcat - 将 OSGi 嵌入 servlet 容器或 OSGi 中的 servlet 容器?

java - 为什么缺少此 aem sling 文件夹区域设置?

aem - 如何在 JAVA 中删除 CQ 节点的属性

java - 在 GAE 上生成并提供 XML 文件

java - 正确终止java流

java - 实现 JpaRepository 的最佳实践