1. 程式人生 > >mondrian 4.7 源碼部署

mondrian 4.7 源碼部署

9.1 loader 對象 rom maven中央倉庫 oca ESS 完成 prop

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"

mondrian 4.7 源碼部署