将 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-Name
和 Bundle-Version
属性)。
然后你必须启动Birt engine in POJO mode: without calling EngineConfig.setEngineHome(engineHome)
。
最后,对于字体配置,您可以使用:
EngineConfig.setFontConfig(pathToFontsConfigXmlAsUrl)
(thanks for that answer)
FontFactory.register("path/to/myfont.ttf")
(thanks for that answer) 如果你想从类路径加载特定字体
FontFactory.registerDirectory("/path/to/external/dir")
if you want to declare an external directory of font to use (thanks for that answer)
这里是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
}
我有一个 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-Name
和 Bundle-Version
属性)。
然后你必须启动Birt engine in POJO mode: without calling EngineConfig.setEngineHome(engineHome)
。
最后,对于字体配置,您可以使用:
EngineConfig.setFontConfig(pathToFontsConfigXmlAsUrl)
(thanks for that answer)FontFactory.register("path/to/myfont.ttf")
(thanks for that answer) 如果你想从类路径加载特定字体FontFactory.registerDirectory("/path/to/external/dir")
if you want to declare an external directory of font to use (thanks for that answer)
这里是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
}