<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Maven on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/maven/</link>
        <description>Recent content in Maven on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Thu, 28 Mar 2019 17:43:23 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/maven/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>继续折腾 maven 编译提速</title>
        <link>https://blog.zrj.me/posts/2019-03-28-%E7%BB%A7%E7%BB%AD%E6%8A%98%E8%85%BE-maven-%E7%BC%96%E8%AF%91%E6%8F%90%E9%80%9F/</link>
        <pubDate>Thu, 28 Mar 2019 17:43:23 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2019-03-28-%E7%BB%A7%E7%BB%AD%E6%8A%98%E8%85%BE-maven-%E7%BC%96%E8%AF%91%E6%8F%90%E9%80%9F/</guid>
        <description>&lt;p&gt;之前折腾过一次 &lt;a class=&#34;link&#34; href=&#34;https://zrj.me/archives/1886&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zrj.me/archives/1886&lt;/a&gt; 但是效果并不理想&lt;/p&gt;
&lt;p&gt;我想要的效果是：通过一些配置的方式，来控制 maven 只编译指定的文件，不编译多余的文件，（哪怕那些文件在那里）&lt;/p&gt;
&lt;p&gt;搜到这里有一个答案， &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/11051620/compiling-only-selected-files-in-maven&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/11051620/compiling-only-selected-files-in-maven&lt;/a&gt; 点赞很高，看起来有用，但是实际测试了一下，感觉并没有生效，还是编译了很多文件，并且报错找不到定义&lt;/p&gt;
&lt;p&gt;然后看到这里 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/1784077/maven-assembly-plugin-for-certain-files&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/1784077/maven-assembly-plugin-for-certain-files&lt;/a&gt; 加了一个 assembly.xml&lt;/p&gt;
&lt;p&gt;但是报错 Failed to create assembly: Error creating assembly archive bin: You must set at least one file.&lt;/p&gt;
&lt;p&gt;看到这里 &lt;a class=&#34;link&#34; href=&#34;https://3gods.com/ops/Maven-Assembly-Problem.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://3gods.com/ops/Maven-Assembly-Problem.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;加了一个&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependencySets&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependencySet&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;useProjectArtifact&amp;gt;&lt;/span&gt;true&lt;span class=&#34;nt&#34;&gt;&amp;lt;/useProjectArtifact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;outputDirectory&amp;gt;&lt;/span&gt;lib&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;runtime&lt;span class=&#34;nt&#34;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependencySet&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependencySets&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这下能打成了，而且确实小了很多，那试试加上一个指定的文件呢&lt;/p&gt;
&lt;p&gt;打包是能打，但是跑起来报错 java.lang.NoClassDefFoundError: scala/collection/immutable/Map&lt;/p&gt;
&lt;p&gt;查了下 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/37225780/scala-package-ith-sbt-cant-find-immutalbe-map&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/37225780/scala-package-ith-sbt-cant-find-immutalbe-map&lt;/a&gt; 这里说要在 classpath 中加上 scala library 的 jar 包，加上去，换了一个错误报，报错找不到或无法加载主类&lt;/p&gt;
&lt;p&gt;不过回头一想，试了一下以前打的一个旧的包，发现也不行，看来不是这次引入的问题，而是 java 的包本身执行 scala 就会有问题&lt;/p&gt;
&lt;p&gt;把这么打出来的 jar 包丢到集群上，居然能跑，哇哈哈哈哈哈&lt;/p&gt;
&lt;p&gt;上面这个属于瞎猫撞上死耗子，那么接下来，会有这么几个问题：&lt;/p&gt;
&lt;p&gt;【1】scala-maven-plugin 中的配置和 maven-assembly-plugin 中的配置分别是如何起作用的，以及是如何互相协作生效的&lt;/p&gt;
&lt;p&gt;【2】对于一个复杂的文件来说，如何找出他的依赖树，这个可以看到这里 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/5984745/need-dependency-tree-for-a-java-source-file&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/5984745/need-dependency-tree-for-a-java-source-file&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;【3】还有一些第三方的 jar 包被打进去了，怎么从中找出那些并没有被任何文件依赖的包，然后把他们剔除掉呢，这个貌似也有方案 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/1517611/is-there-a-simple-way-to-remove-unused-dependencies-from-a-maven-pom-xml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/1517611/is-there-a-simple-way-to-remove-unused-dependencies-from-a-maven-pom-xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不得不感慨 java 社区真是成熟啊&lt;/p&gt;
</description>
        </item>
        <item>
        <title>提升 maven 编译 scala 的速度</title>
        <link>https://blog.zrj.me/posts/2018-11-01-%E6%8F%90%E5%8D%87-maven-%E7%BC%96%E8%AF%91-scala-%E7%9A%84%E9%80%9F%E5%BA%A6/</link>
        <pubDate>Thu, 01 Nov 2018 16:51:45 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-11-01-%E6%8F%90%E5%8D%87-maven-%E7%BC%96%E8%AF%91-scala-%E7%9A%84%E9%80%9F%E5%BA%A6/</guid>
        <description>&lt;p&gt;我们 spark 的计算任务是用 scala 来写的，maven 编译，但是随着 scala 源文件的数量越来越多，（现在一个 project 已经 800+ 源文件了），编译速度成为了一个很大瓶颈，编译一次都要 10+ 分钟，大大影响了开发效率&lt;/p&gt;
&lt;p&gt;首先想到的是，排除掉一些与自己计算任务无关的代码，看看能不能加速，从这里看到 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/17920920/maven-excluding-java-files-in-compilation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/17920920/maven-excluding-java-files-in-compilation&lt;/a&gt; 通过 exclude 的方式可以排除&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-compiler-plugin&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;excludes&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;exclude&amp;gt;&lt;/span&gt;**/api/test/omi/*.java&lt;span class=&#34;nt&#34;&gt;&amp;lt;/exclude&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/excludes&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是我实际测试下来，发现并没有什么卵用，下面评论有人提到，是否是 src/main/scala 前缀的问题，但是不管我加不加这个前缀，都一样没用&lt;/p&gt;
&lt;p&gt;然后重新换个方向放狗搜，看到这里 &lt;a class=&#34;link&#34; href=&#34;https://www.lightbend.com/blog/zinc-and-incremental-compilation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lightbend.com/blog/zinc-and-incremental-compilation&lt;/a&gt; 这个文件介绍了 zinc 的神奇功效，堪比大力丸，然后又看到这里 &lt;a class=&#34;link&#34; href=&#34;http://hohonuuli.blogspot.com/2012/11/fast-scala-compilation-with-maven.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://hohonuuli.blogspot.com/2012/11/fast-scala-compilation-with-maven.html&lt;/a&gt; 这个文章介绍了 zinc server 的具体安装配置方式，于是就照葫芦画瓢，试试呗&lt;/p&gt;
&lt;p&gt;首先从 &lt;a class=&#34;link&#34; href=&#34;https://github.com/typesafehub/zinc&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/typesafehub/zinc&lt;/a&gt; 下载 zinc 的 zip 包，然而，发现这个东西在 Windows 上不好搞，卒&lt;/p&gt;
&lt;p&gt;最终通过修改 eclipse 的启动参数 -Xmx8G -Xms4G 来加速，囧&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;继续折腾 maven 编译提速 | ZRJ&lt;/strong&gt; (2019-03-28 17:43:26):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[…] &lt;a class=&#34;link&#34; href=&#34;https://zrj.me/archives/1886&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zrj.me/archives/1886&lt;/a&gt; […]&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>maven 编译强制使用本地库</title>
        <link>https://blog.zrj.me/posts/2018-06-21-maven-%E7%BC%96%E8%AF%91%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E5%BA%93/</link>
        <pubDate>Thu, 21 Jun 2018 22:43:43 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2018-06-21-maven-%E7%BC%96%E8%AF%91%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E5%BA%93/</guid>
        <description>&lt;p&gt;今天在编译一个 maven 工程的时候发现一个问题，一个被依赖的包是自己的，在本地，但是 maven 总是试图去拉远程的 repo，例如这样&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[ERROR] Failed to execute goal on project wxad.p2.stat: Could not resolve dependencies for project ....: Failed to collect dependencies at ...: Failed to read artifact descriptor for ...: Could not transfer artifact ...:${project.version} from/to central (http://maven.oa.com/nexus/content/groups/public): Illegal character in path at index 93: ... -&amp;gt; [Help 1]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;那我们就想了，这里能不能强制让他读本地的，按照国际惯例，首先 Google 搜，看到这里 &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/33548395/how-do-i-force-maven-to-use-my-local-repository-rather-than-going-out-to-remote&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/33548395/how-do-i-force-maven-to-use-my-local-repository-rather-than-going-out-to-remote&lt;/a&gt; 提到说是 snapshot 的问题，但是我们这个应该不是 snapshot 的问题了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The dependency has a snapshot version. For snapshots, Maven will check the local repository and if the artifact found in the local repository is too old, it will attempt to find an updated one in the remote repositories. That is probably what you are seeing.&lt;/p&gt;
&lt;p&gt;Note that this behavior is controlled by the updatePolicy directive in the repository configuration (which is daily by default for snapshot repositories).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;又想到 eclipse 的 run configuration 里面有一个 offline 的选项，勾上试试呢，结果就报下面这个错，看来是非常的顽固，一定要从远程 repo 拉取&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[ERROR] Failed to execute goal on project ... Could not resolve dependencies for project ... Failed to collect dependencies at ...: Failed to read artifact descriptor for ...: Cannot access central (http://maven.oa.com/nexus/content/groups/public) in offline mode and the artifact ...:pom:${project.version} has not been downloaded from it before. -&amp;gt; [Help 1]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;继续放狗搜，看到这里 &lt;a class=&#34;link&#34; href=&#34;https://webcache.googleusercontent.com/search?q=cache:08w3S4AtXIwJ:https://blog.csdn.net/chancein007/article/details/77714667&amp;#43;&amp;amp;cd=1&amp;amp;hl=zh-CN&amp;amp;ct=clnk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://webcache.googleusercontent.com/search?q=cache:08w3S4AtXIwJ:https://blog.csdn.net/chancein007/article/details/77714667+&amp;cd=1&amp;hl=zh-CN&amp;ct=clnk&lt;/a&gt; （顺便吐槽一下，现在 csdn 看一个博客帖子都要强制登录了吗，吃枣药丸啊）里面提到&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;笔者发现自己的${user.home}/.m2/repository 目录下的的确确也存在这个jar文件，那么为什么编译通不过呢？&lt;/p&gt;
&lt;p&gt;后发现其里面有一个 _remote.reposiories 文件，其内容如下，&lt;/p&gt;
&lt;p&gt;#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice. #Tue Mar 21 10:55:02 CST 2017 sqljdbc4-4.0.pom&amp;gt;clojars-repo= sqljdbc4-4.0.jar&amp;gt;clojars-repo=&lt;/p&gt;
&lt;p&gt;但是我的Maven的pom.xml已经把clojars-repo的repo删除掉了，是不是因为这个原因导致Maven的编译通不过呢？抱着尝试的心里，笔者删除了这个文件，再一次运行mvn clean verify， Awesome！！！！ 通过了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;顺便说一下，他的 _remote.repositories 还拼错了&lt;/p&gt;
&lt;p&gt;但是我把我这里的几个 _remote.repositories 都删除了，也还是不行，但是看报错信息，一直把 ${project.version} 的变量带着，感觉这个东西应该是要被转义的啊，于是就想是不是什么地方的这个变量没有定义清楚&lt;/p&gt;
&lt;p&gt;并导致了 .pom.lastUpdated 这个文件和 .pom 分到了不同的目录中，那先不管是什么环节配置出错，先把这两个文件手工放在一起可以吗&lt;/p&gt;
&lt;p&gt;答案是貌似不行。。。&lt;/p&gt;
&lt;p&gt;那还是回到找文件配置是哪里出问题的思路上&lt;/p&gt;
&lt;p&gt;找啊找，终于找到问题应该是在子工程中引用了父工程定义的变量，由于转义不了，于是就原样输出了&lt;/p&gt;
&lt;p&gt;这个问题依然可以通过放狗搜找到答案，（啊，真是万能的 Google 和万能的 stackoverflow） &lt;a class=&#34;link&#34; href=&#34;https://stackoverflow.com/questions/10582054/maven-project-version-inheritance-do-i-have-to-specify-the-parent-version&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://stackoverflow.com/questions/10582054/maven-project-version-inheritance-do-i-have-to-specify-the-parent-version&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其中提到&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Maven is not designed to work that way, but a workaround exists to achieve this goal (maybe with side effects, you will have to give a try). The trick is to tell the child project to find its parent via its relative path rather than its pure maven coordinates, and in addition to externalize the version number in a property :&lt;/p&gt;
&lt;p&gt;Parent pom com.dummy.bla parent ${global.version} pom&lt;/p&gt;
&lt;p&gt;0.1-SNAPSHOT Child pom com.dummy.bla parent ${global.version} ..&lt;/p&gt;
&lt;p&gt;com.dummy.bla.sub kid I used that trick for a while for one of my project, with no specific problem, except the fact that maven logs a lot of warnings at the beginning of the build, which is not very elegant.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于是依葫芦画瓢，改了一下，但是这种写法依然不太好使&lt;/p&gt;
&lt;p&gt;下面也说了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I used that trick for a while for one of my project, with no specific problem, except the fact that maven logs a lot of warnings at the beginning of the build, which is not very elegant.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于是就把这个 project.version 写死了，终于可以&lt;/p&gt;
</description>
        </item>
        <item>
        <title>自行编译 saiku 的一些填坑记录</title>
        <link>https://blog.zrj.me/posts/2017-04-18-%E8%87%AA%E8%A1%8C%E7%BC%96%E8%AF%91-saiku-%E7%9A%84%E4%B8%80%E4%BA%9B%E5%A1%AB%E5%9D%91%E8%AE%B0%E5%BD%95/</link>
        <pubDate>Tue, 18 Apr 2017 14:02:08 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2017-04-18-%E8%87%AA%E8%A1%8C%E7%BC%96%E8%AF%91-saiku-%E7%9A%84%E4%B8%80%E4%BA%9B%E5%A1%AB%E5%9D%91%E8%AE%B0%E5%BD%95/</guid>
        <description>&lt;p&gt;起因是说 jackson 的代码存在一个远程任意代码执行漏洞， &lt;a class=&#34;link&#34; href=&#34;http://bobao.360.cn/news/detail/4124.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://bobao.360.cn/news/detail/4124.html&lt;/a&gt; ，而 saiku 又用到了 jackson，用的是 2.5.1&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2017/04/20170418114143.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/20170418114143.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;20170418114143&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因此我们需要自行编译一个 saiku 的 pentaho 插件，把 jackson 的版本升上去&lt;/p&gt;
&lt;p&gt;在此之前，我们用的是从 saiku 的官方下载回来的预编译好的 saiku-pentaho 插件，版本是 saiku-plugin-p7-3.11-SNAPSHOT&lt;/p&gt;
&lt;p&gt;saiku 的代码拉下来之后是这样的&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2017/04/20170418114743.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/20170418114743.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;20170418114743&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;直接导入所有子工程到 eclipse 报错，例如出现以下的 error， Artifact has not been packaged yet. When used on reactor artifact, copy should be executed after packaging: see MDEP-187. (org.apache.maven.plugins:maven-dependency-plugin:2.8:copy:copy:package) pom.xml /saiku-bi-platform-plugin-p5 line 31 Maven Build Problem&lt;/p&gt;
&lt;p&gt;Google 之后看到这里， &lt;a class=&#34;link&#34; href=&#34;http://blog.csdn.net/ahau10/article/details/53258663&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://blog.csdn.net/ahau10/article/details/53258663&lt;/a&gt; 说这个其实是 eclipse 的 maven 插件的问题&lt;/p&gt;
&lt;p&gt;于是忽略，直接 skip test 跑 maven clean package，报错， Could not transfer artifact org.saikuanalytics:saiku-webapp:war:3.13 from/to Analytical Labs Repo (&lt;a class=&#34;link&#34; href=&#34;http://repo.meteorite.bi/repository/alabs-release-local/%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://repo.meteorite.bi/repository/alabs-release-local/)&lt;/a&gt;: connect timed out&lt;/p&gt;
&lt;p&gt;这个第一反应就是公司内网的问题，在 .m2\settings.xml 里面给配置了 proxy 之后重试，依然无效，于是尝试用 Proxifier ，但是神器 Proxifier 只能走 socket 4 或者 5 的代理，要么就是 https，没有 http 的代理，我试着强制配了一个，也还是不行（这里其实引申出来一个问题，就是我们并不知道 mvn 在 package 的时候，对于一个具体的 denpendency，到底是从公司内网的 repo 拉取的，还是上公网拉取的，以及走没走代理，这些应该都是在 mvn 的参数里面可以有类似 verbose 的开关的，不过赶时间，没细究下去）&lt;/p&gt;
&lt;p&gt;不过回头去看，编译的输出&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[INFO] Saiku Module Project ............................... SUCCESS [  0.103 s]
[INFO] saiku - core libraries ............................. SUCCESS [  0.338 s]
[INFO] saiku olap util .................................... SUCCESS [  2.294 s]
[INFO] saiku-services ..................................... SUCCESS [ 47.300 s]
[INFO] saiku - web ........................................ SUCCESS [ 12.694 s]
[INFO] saiku-ui ........................................... SUCCESS [  4.776 s]
[INFO] saiku - webapp ..................................... SKIPPED
[INFO] saiku-server ....................................... FAILURE [01:31 min]
[INFO] saiku biserver plugin .............................. SUCCESS [ 14.063 s]
[INFO] saiku biserver plugin .............................. SUCCESS [  2.527 s]
[INFO] saiku biserver plugin .............................. SUCCESS [  3.291 s]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以发现其实大部分还是能够编译过的，只有 saiku-server 这个是失败了，既然 saiku biserver plugin 能够编译过（上面的 maven 输出中没有输出版本号，其实 3 个 saiku biserver plugin 分别是 plugin 的 p5 p6 p7 版本），我们用的是 p7，那么直接在 p7 的 pom.xml 中修改 jackson 版本的 dependency，一开始配置了 jackson 的 2.9.0pr1，但是这个版本还在 pr 阶段，虽然能够 maven package 通过，出来一个插件的 zip 包，但是不知道会不会有潜在的问题&lt;/p&gt;
&lt;p&gt;后来发现帖子中说 2.7.10 也修复了这个漏洞， &lt;a class=&#34;link&#34; href=&#34;http://bobao.360.cn/news/detail/4124.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://bobao.360.cn/news/detail/4124.html&lt;/a&gt; ，于是改用 2.7.10，dependency 如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.core&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-databind&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.jaxrs&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-jaxrs-json-provider&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.core&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-annotations&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.core&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-core&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.jaxrs&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-jaxrs-base&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.fasterxml.jackson.module&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jackson-module-jaxb-annotations&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.10&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后尝试 mvn clean package，编译的时候可以发现他有类似这样的输出&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[INFO] Downloading: http://repo.meteorite.bi/repository/alabs-release-local/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://repo.meteorite.bi/repository/alabs-snapshot-local/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://nexus.pentaho.org/content/repositories/proxied-3rd-party-releases/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://nexus.pentaho.org/content/repositories/pentaho-public-release-repos/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://nexus.pentaho.org/content/repositories/public-snapshots/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: https://repository.apache.org/content/repositories/snapshots/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: https://maven.atlassian.com/content/repositories/atlassian-public/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://repository.pentaho.org/artifactory/repo/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://clojars.org/repo/com/fasterxml/jackson/core/jackson-core/2.7.10/jackson-core-2.7.10.pom
[INFO] Downloading: http://repo.meteorite.bi/repository/alabs-release-local/com/fasterxml/jackson/core/jackson-annotations/2.7.10/jackson-annotations-2.7.10.pom
[INFO] Downloading: http://repo.meteorite.bi/repository/alabs-snapshot-local/com/fasterxml/jackson/core/jackson-annotations/2.7.10/jackson-annotations-2.7.10.pom
[INFO] Downloading: http://nexus.pentaho.org/content/repositories/proxied-3rd-party-releases/com/fasterxml/jackson/core/jackson-annotations/2.7.10/jackson-annotations-2.7.10.pom
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以看到，即使是对于 jackson 这种公开的库，他也依然优先走了 repo.meteorite.bi 和 nexus.pentaho.org 的 maven repo 去拉取，这样就导致速度上比较慢，这个估计是在某个 pom 文件中配置的 repo 的优先次序导致的&lt;/p&gt;
&lt;p&gt;导致编译直接报错，Could not resolve dependencies for project org.saikuanalytics:saiku-bi-platform-plugin-p7:jar:3.13: Failed to collect dependencies at com.fasterxml.jackson.core:jackson-core:jar:2.7.10: Failed to read artifact descriptor for com.fasterxml.jackson.core:jackson-core:jar:2.7.10: Could not transfer artifact com.fasterxml.jackson.core:jackson-core:pom:2.7.10 from/to Analytical Labs Repo (&lt;a class=&#34;link&#34; href=&#34;http://repo.meteorite.bi/repository/alabs-release-local/%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://repo.meteorite.bi/repository/alabs-release-local/)&lt;/a&gt;: connect timed out -&amp;gt; [Help 1]&lt;/p&gt;
&lt;p&gt;于是尝试把 saiku-tag-3.13\saiku-bi-platform-plugin-p7\pom.xml 中的 repositories 标签整个注释掉，依然失败，继续尝试把 saiku-tag-3.13\pom.xml 的 repositories 标签注释掉，这次倒是去公司内网的 maven 拉取了，但是报错拉取不到，于是排查了一下，发现 2.7.10 貌似还没上到 maven 仓库中&lt;/p&gt;
&lt;p&gt;于是改回用 2.9.0pr1，同时把上面提到的注释重新打开&lt;/p&gt;
&lt;p&gt;这次倒是可以打包成功过了，得到一个 saiku-plugin-p7-3.11.zip 的包，放到 \pentaho-server\pentaho-solutions\system 中，重启 pentaho 就可以了&lt;/p&gt;
&lt;p&gt;但是发现 loading 一直转，进不去，打开 chrome 的控制台，发现错误如下&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2017/04/20170418103206.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/20170418103206.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;20170418103206&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而官方预编译的包的前端输出如下&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/wp-content/uploads/2017/04/20170418103616.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://blog.zrj.me/images/20170418103616.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;20170418103616&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;可以发现错误的根源就是那个 saiku.min.js 里面的抛出的异常，TabSet is not defined，跟到这个文件，在 \pentaho-server\pentaho-solutions\system\saiku\ui\saiku.min.js 发现自己打包出来的 saiku.min.js 文件只有 5k，而官方预编译的有 303k&lt;/p&gt;
&lt;p&gt;跟踪可以发现，这个 saiku.min.js 来自 saiku-ui 工程，这个工程下面看到一个 gruntfile.js，可以说明他是用 grunt 来编译，grunt 是一个前端的编译工具，资料可以参考 &lt;a class=&#34;link&#34; href=&#34;http://javascript.ruanyifeng.com/tool/grunt.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://javascript.ruanyifeng.com/tool/grunt.html&lt;/a&gt; 等文章，这个 grunt 里面坑比较多，估计暂时填不平，因此直接从官方的预编译包中拉出来一个 saiku.min.js 替换上去，就可以打开页面了，然后就是部署 saiku license 等例行工作了&lt;/p&gt;
&lt;p&gt;至此，基本上就得到一个自行编译的带 jackson 2.9.0pr1 + 官方预置的 saiku.min.js 的混合包&lt;/p&gt;
&lt;p&gt;-&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&lt;/p&gt;
&lt;p&gt;2017-4-18 15:26:05 追加&lt;/p&gt;
&lt;p&gt;关于 maven verbose 输出的问题，可以参考这里， &lt;a class=&#34;link&#34; href=&#34;http://stackoverflow.com/questions/16898801/how-do-i-get-verbose-output-from-maven-in-the-eclipse-console&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://stackoverflow.com/questions/16898801/how-do-i-get-verbose-output-from-maven-in-the-eclipse-console&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;关于代理的问题，后来发现原因是公司的内网有两个代理，其中一个不行，另外一个专门给开发网使用的代理是可以工作的&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
