将 Birt 与 Maven 一起使用时添加特定的插件和配置

Add specific plugins and config when using Birt with Maven

我有一个 Maven jar 项目,我在其中使用 Birt 来生成一些 PDF。

为了使用 Birt 引擎,我刚刚将此依赖项添加到我的 <dependencies>:

<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.birt.runtime</artifactId>
    <version>4.4.2</version>
</dependency>

我 运行 我的主要 class 使用 mvn exec:java

我的问题是:当我在没有 Maven 的情况下使用 Birt 运行time 时,我可以在 plugins 目录中添加 Birt 插件并修改 plugins/org.eclipse.birt.report.engine.fonts_4.4.2.v201410272105/fontsConfig.xml 以添加特定的 <font-paths><path ...,如何使用此 Maven 环境执行此操作?

我也不确定我现在必须给 org.eclipse.birt.core.framework.PlatformConfig.setBIRTHome(String)org.eclipse.birt.report.engine.api.EngineConfig.setEngineHome(String) 哪条路径。

我尝试遵循 the guide 并使用了 config.setEngineHome("absolute_path_to_a_4.4.2_osgi_birt_runtime") 但后来我得到了堆栈跟踪(在对 factory.createReportEngine(config) 的调用中):

java.lang.NullPointerException
at org.eclipse.birt.report.engine.api.impl.ReportEngine$EngineExtensionManager.<init>(ReportEngine.java:822)
at org.eclipse.birt.report.engine.api.impl.ReportEngine.<init>(ReportEngine.java:111)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory.run(ReportEngineFactory.java:18)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory.run(ReportEngineFactory.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory.createReportEngine(ReportEngineFactory.java:14)

好像Platform.getExtensionRegistry() returns null...

如果我不调用 config.setEngineHome 也不调用 config.setBIRTHome,那么我会遇到 org.eclipse.birt.report.engine.api.impl.ParameterValidationException: Required parameter myParam is not set.,这是我在迁移到 Maven 之前没有遇到的错误(实际上,我的 rptdesign 使用链接库中的 myParam

我也已将我的问题发布到 Birt dev forums

首先,您可以将 Birt 4.4.2 与此 Maven 配置一起使用(由于 pom.xml of the runtime 存在错误并声明了这些依赖项的 2 个不同版本):

<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.birt.runtime</artifactId>
    <version>4.4.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.birt.runtime</groupId>
            <artifactId>org.eclipse.osgi.services</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.birt.runtime</groupId>
            <artifactId>com.ibm.icu</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.osgi.services</artifactId>
    <version>3.4.0.v20140312-2051</version>
</dependency>
<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>com.ibm.icu</artifactId>
    <version>52.1.1.v201501240615</version>
</dependency>

然后,可以像添加任何经典 Maven 依赖项一样添加任何 Birt 插件(前提是存在正确的 META-INF/MANIFEST.MF 定义 Bundle-NameBundle-Version 属性)。

然后你必须启动Birt engine in POJO mode: without calling EngineConfig.setEngineHome(engineHome)

最后,对于字体配置,您可以使用:

这里是bootstrap代码的例子(基于Birt website directives):

try{
    final EngineConfig config = new EngineConfig( );

    config.setLogConfig("c:/temp", Level.FINE);
    config.setFontConfig("c:/temp/fontsConfig.xml");

    Platform.startup( config );
    //If using RE API in Eclipse/RCP application this is not needed.
    IReportEngineFactory factory = (IReportEngineFactory) Platform
            .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
    IReportEngine engine = factory.createReportEngine( config );
    engine.changeLogLevel( Level.WARNING );
}catch( Exception ex){
    ex.printStackTrace();
}
// Run reports, etc.
...

// destroy the engine.
try
{
    engine.destroy();
    Platform.shutdown();
    //Bugzilla 351052
    RegistryProviderFactory.releaseDefault();
}catch ( EngineException e1 ){
    // Ignore
}