mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 能够再github上下载到最近更新维护的mondrian-master, 下载下来后基本上只须要循序渐进的使用maven build一下就能够正常使用了, 若有问题能够根据提示进行一下排查就OK了. mondrian4.7目前是一个beta版, 相关的部署文档较少, 笔者也是痛苦的部署了不少次, 各方请教才部署成功的, 下面就部署的一些坑进行相关记录.html
ant 1.9.11java
maven 3.3.9mysql
git 2.17.0git
jdk 1.8.0_91github
能够在GitHub上下载mondrian4.7.0.11的源码 https://github.com/pentaho/mondrian/tree/4.7.0.11web
建议在 http://sourceforge.net/projects/mondrian/ 上也下载一份相应的源码, 此处的源码是.jar结尾的sql
在github上下载的源码和在源码在编译以前是会缺失一部分java文件的. 所以首先需对工程进行编译.数据库
将github上下载的源码解压缩, 解压以后在跟你目录下运行ant, 以下图所示. 因为ant编译过程当中须要时使用的git, 所以咱们须要安装配置git的环境.apache
在file:///C:/Users/Administrator/Downloads/mondrian-4.7.0.11/mondrian-4.7.0.11/doc/developer.html中提供了开发者源码编译步骤. 能够做为参考.tomcat
若是编译的过程当中出现相似以下错误, 则能够根据提示去对应网址(https://nexus.pentaho.org/content/groups/omni/), 下载相应的jar包, 放在{user}/.subfloor/对应的目录中:
下载后的目录以下图所示:
ant环境配置好后, 继续执行ant命令, 会出现以下图所示的提示, 则表示ant编译成功, 缺失的类也生成了.
能够将(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
将通过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中便可.
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"