mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 可以再github上下载到最近更新维护的mondrian-master, 下载下来后基本上只需要按部就班的使用maven build一下就可以正常使用了, 如有问题可以根据提示进行一下排查就OK了. mondrian4.7目前是一个beta版, 相关的部署文档较少, 笔者也是痛苦的部署了很多次, 各方请教才部署成功的, 下面就部署的一些坑进行相关记录.
1. 环境配置
ant 1.9.11
maven 3.3.9
git 2.17.0
jdk 1.8.0_91
可以在GitHub上下载mondrian4.7.0.11的源码 https://github.com/pentaho/mondrian/tree/4.7.0.11
建议在 http://sourceforge.net/projects/mondrian/ 上也下载一份相应的源码, 此处的源码是.jar结尾的
2. 源码编译
在github上下载的源码和在源码在编译之前是会缺失一部分java文件的. 因此首先需对工程进行编译.
2.1 ant编译环境
将github上下载的源码解压缩, 解压之后在跟你目录下运行ant, 如下图所示. 由于ant编译过程中需要时使用的git, 因此我们需要安装配置git的环境.
在file:///C:/Users/Administrator/Downloads/mondrian-4.7.0.11/mondrian-4.7.0.11/doc/developer.html中提供了开发者源码编译步骤. 可以作为参考.
如果编译的过程中出现类似如下错误, 则可以根据提示去对应网址(https://nexus.pentaho.org/content/groups/omni/), 下载相应的jar包, 放在{user}/.subfloor/对应的目录中:
下载后的目录如下图所示:
ant环境配置好后, 继续执行ant命令, 会出现如下图所示的提示, 则表示ant编译成功, 缺失的类也生成了.
2.2 maven环境配置
可以将(https://nexus.pentaho.org/content/groups/omni/)配置为maven中央仓库, mondrian大部分以来的jar包都可以在此处找到. 不过笔者该仓库配置没有生效, 不知道是不是应为https的原因. 对于无法自动下载的jar包, 笔者手动下载安装到maven仓库中了. 下载过的jar包如下图所示.
将jar包手动install到本地仓库的命令如下:
mvn install:install-file -Dfile=C:\Users\Administrator\Downloads\jmxri-1.2.1.jar -DgroupId=com.sun.jmx -DartifactId=jmxri -Dversion=1.2.1 -Dpackaging=jar
其中: Dfile: 指定jar所在路径
DgroupId: 指定jar包对应的groupId
DartiactId: 指定jar包的artifactId
Dversion: 指定jar包的版本信息
Dpackaging: 指定打包的形式, 此处为jar
3 工程导入eclipse
将经过ant编译后的工程导入eclipse中, eclipse一般会制动识别指定的source所在的包, 如果无法识别或者是识别后无法将java文件自动编译成.class文件的话, 则在buildpath中手动添加source或将之前的添加的删除然后手动添加一遍, 并指定编译后class的存放路径.
由于ant编译时, 只编译的部分类, 因此在eclipse中可以在run as-->maven bulid.. 中使用install -DskipTests -X命令来编译所有java文件(test除外).
初始导入install后的工程如下图所示, java文件中‘空心J‘表示java文件未编译:
在build path中将source移除后重新导入, 并制定变异后class的存放地址, 即可自动编译java文件
mondrian编译打包完成后, 就可以进行相应的测试了
4 mondrian源码测试:
mondrian本身自带demo, 在demo中包含一套完整的测试时所需要的schema和sql建表语句. 测试类如下所示:
package com.rodge;
import java.io.PrintWriter;
import mondrian.olap.Connection;
import mondrian.olap.DriverManager;
import mondrian.olap.Query;
import mondrian.olap.Result;
public class TestMondrian {
public static void main(String[] args) {
String str = "Provider=mondrian;"+
"Jdbc=jdbc:mysql://localhost:3306/foodmart?user=root&password=123456;"+
"Catalog=file:///F:/mondrian/mondrian-4.7.0.11/demo/FoodMart.mondrian.xml;"+
"JdbcDrivers=com.mysql.jdbc.Driver; ";
Connection conn = DriverManager.getConnection(str, null);
// 定义查询语句,遵循mdx语法
String queryStr = "select {[Measures].[Unit Sales]} on columns from Sales";
// 利用connection生成一个Query对象
Query query = conn.parseQuery(queryStr);
@SuppressWarnings("deprecation")
// 执行查询得到结果:
Result result = conn.execute(query);
// 控制台打印结果
PrintWriter pw = new PrintWriter(System.out);
result.print(pw);
pw.flush();
System.out.println("successful!");
}
}
foodmart的数据创建将在后面介绍, 当数据库配置完成后, 运行该测试类, 会出现如下错误:
这是因为, 在mondrian.resource.MondrianResource中, 找不到MondrianResource.propertis配置文件. 该配置文件可以在mondrian-4.7.0.0-12.jar\mondrian\resource 中获取, mondrian-4.7.0.0-12.jar实在(https://sourceforge.net/projects/mondrian/files/mondrian/mondrian-4.7.0/mondrian-4.7.0.0-12-sources.jar)中下载得到的. 将MondrianResource.propertis配置文件拷贝到eclipse中/mondrian/src/main/java/mondrian/resource/MondrianResource.properties中即可.
5 测试foodmart数据库的配置
foodmart测试数据库的配置在网上有很多版本, 但是笔者测试后, 发现都需要进行相关改动, 位置, 笔者将数据库配置的步骤进行了整理.
有序mondrian4.7中不包含foodmart的相关信息的配置, 改配置信息需要在mondrian-3.7.0.0-752.zip中寻找, 下载地址为:ttp://sourceforge.net/projects/mondrian/files/mondrian/mondrian-3.7.0/mondrian-3.7.0.0-752.zip
下载下来后, 解压, 在mondrian-3.7.0.0-752.zip\lib目录中, 将jpivot.war拷贝到tomcat/webapps并重命名为mondrian.war, 解压该war包, 并将mysql的链接类拷贝到tomcat/lib中,
进入E:\application\apache-tomcat-7.0.65\webapps\mondrian\WEB-INF\lib目录, 执行如下命令, 即可创建foodmark需要的表结构, 当然, 前提是数据中库拥有foodmart这个数据库.
java -cp "E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/mondrian.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/log4j-1.2.8.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/commons-logging-1.0.4.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-resgen.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-xom.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-properties.jar;E:/application/apache-tomcat-7.0.65/lib/mysql-connector-java-5.1.31.jar" mondrian.test.loader.MondrianFoodMartLoader -verbose -tables -data -indexes -jdbcDrivers=com.mysql.jdbc.Driver -inputFile="C:/Users/Administrator/Downloads/demo/FoodMartCreateData/FoodMartCreateData.sql" -outputJdbcURL="jdbc:mysql://localhost:3306/foodmart?user=root&password=123456"