平生从未见过如此糟糕的官方maven发布质量,窃以为是公司只想卖商业版本,对应的开源版本BIRT简直就是抱来养的。
为了顺利集成BIRT,采用两步走方式:以eclipse的能运行版本为比较基础,再使用maven方式集成验证。
传统动态web项目方式
使用eclipse官方下载的birt-runtime-4.6.0-20160607.zip中的WebViewerExample示例,使用传统web项目方式,检验birt是否可以正常运行。
结论是不能运行,报错“Invalid signature file digest for Manifest main attributes”,是有几个jar包中的签名有问题,官方发行包太应付了事了,实话说做这事儿的人必须开除(可能老板就是这个意思,好让大家去买他们的商业版本)。
排查如下两个包有问题:org.eclipse.birt.runtime_4.6.0-20160607.jar, org.eclipse.datatools.connectivity.oda_3.5.0.201603142002.jar。
打开包删除两个签名文件:/META-INF/ECLIPSE_.RSA 和/META-INF/ECLIPSE_.SF。
在tomcat 8.5中运行,可以正确访问报表。
在这个项目的基础上,创建maven项目,并使用beyand compare软件快速比较依赖的jar包区别,进行下一步maven集成工作。
maven集成方式
创建maven web项目,使用仓库中的BIRT 4.6,JDK为1.8,tomcat为8.5。
<dependency>
<groupId>org.eclipse.birt.runtime</groupId>
<artifactId>org.eclipse.birt.runtime</artifactId>
<version>4.6.0-20160607</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.birt.runtime</groupId>
<artifactId>org.eclipse.orbit.mongodb</artifactId>
</exclusion>
</exclusions>
</dependency>
maven依赖中的这个包org.eclipse.birt.runtime-4.6.0-20160607.jar,和runtime示例中对应的包比较,缺失Tidy类,需要使用runtime下载zip包中的对应文件(org.eclipse.birt.runtime_4.6.0-20160607.jar删除签名文件,注意下划线和横线的区别)替换本地maven仓库中的文件。
maven依赖包中的org.eclipse.datatools.connectivity.oda-3.5.0.201603142002.jar,打开这个文件,删除/META-INF/ECLIPSE_.RSA 和/META-INF/ECLIPSE_.SF。
maven仓库中没有BIRT web viewer,使用本地仓库加载,将viewservlets.jar拷贝到GAV对应的本地路径(例如:/Users/kevin/.m2/repository/org/eclipse/birt/viewer/birt.viewer/4.6.0-20160607/birt.viewer-4.6.0-20160607.jar)。
不停的启动,检查缺失的包:axis-jaxrpc和commons-discovery。
直到可以正常访问报表。
最后可运行的maven pom文件为
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.xprogrammer</groupId>
<artifactId>birtmvn</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>birtmvn Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.eclipse.birt.runtime</groupId>
<artifactId>org.eclipse.birt.runtime</artifactId>
<version>4.6.0-20160607</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.birt.runtime</groupId>
<artifactId>org.eclipse.orbit.mongodb</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 整合BIRT需要添加的依赖包 -->
<dependency>
<groupId>org.eclipse.birt.viewer</groupId>
<artifactId>birt.viewer</artifactId>
<version>4.6.0-20160607</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<!-- end 整合BIRT需要添加的依赖包 -->
</dependencies>
<build>
<finalName>birtmvn</finalName>
</build>
</project>
报表也能正常导出。
2019年10月1日,成都,Kevin。
2020年4月23日,成都,Kevin。