Solr 4.7.2打补丁重新编译流程

下载.patch补丁文件: 

  https://issues.apache.org/jira/browse/SOLR-6969,选中补丁文件,右键【另存为】即可下载到本地。

下载solr4.7.2源码:

  源码两种下载方式:

    只下载solr-core:

      1.进入https://mvnrepository.com/官网,搜索solr-core,选择相应版本(Version 4.7.2),就会出现我们想要的jar包;
      2.右键【Download(JAR)】,复制链接地址,如http://central.maven.org/maven2/org/apache/solr/solr-core/4.7.2/solr-core-4.7.2.jar,
         打开浏览器新标签页,输入该地址的前半部分,即http://central.maven.org/maven2/org/apache/solr/solr-core/4.7.2/,进入页面看到solr-core的jar包,source包,javadoc包;
      3.下载solr-core-4.7.2-sources.jar包即可;

    下载整个solr 4.7.2版本的源码:(事实证明这种方式更适用)
      1.进入http://archive.apache.org/dist/lucene/solr/4.7.2/
      2.下载solr-4.7.2-src.tgz到本地。

打补丁:

  目标代码:solr-4.7.2-src.tgz

  经过搜索,打补丁有多种方式,这里简单提及以下三种:
    1.IDEA patch:(推荐,缺点:无法回退)
      1).解压并加载solr-4.7.2-src项目到IDEA中;
      2).菜单栏【VCS】——【Apply Patch...】,选择要打的补丁文件SOLR-6969.patch;
      3).选择并查看想要合并的文件,【Apply】即可。

    2.git bash patch:
      适用git bash来打补丁,它不仅可以打补丁,还可以生成补丁,使用方法自行百度;

       3.Linux/Unix diff/patch:
      diff命令可以生成补丁;
      patch命令可以应用补丁;
      使用方法参考:http://www.cnblogs.com/cocowool/p/6409643.html

打包solr-core:

  进入解压后的solr-4.7.2-src ROOT目录下,打开README.txt文件,得到如下信息:

Apache Lucene/Solr

lucene/ is a search engine library
solr/ is a search engine server that uses lucene

To compile the sources run 'ant compile'
To run all the tests run 'ant test'
To setup your ide run 'ant idea', 'ant netbeans', or 'ant eclipse'
For Maven info, see dev-tools/maven/README.maven

 安装Apache ivy:

  背景:ant编译依赖Apache ivy,Apache ivy是一个管理项目依赖的工具,类似于Maven;
  安装方法
    1.官网下载:
      1.进入https://ant.apache.org/ivy/,下载apache-ivy-2.4.0-bin.zip
      2.解压后,ROOT目录下可以看到【ivy-2.4.0.jar】这个包;
      3.拷贝【ivy-2.4.0.jar】到【ANT_HOME/lib】目录下,即完成ivy的安装。

    2.从maven repository下载ivy-${VERSION}.jar:
      1.进入https://mvnrepository.com/,搜索ivy;
      2.选中【org.apache.ivy » ivy】,点击链接并进入相应版本(这里选ivy-2.4.0)的详情页;
      3.下载【ivy-2.4.0.jar】;
      4.拷贝【ivy-2.4.0.jar】到【ANT_HOME/lib】目录下,即完成ivy的安装。

△编译solr-core : (编译过程中,出现的个别错误,需要根据打印出的日志,耐心去解决)  

       在solr-4.7.2-src ROOT目录下,打开CMD命令行,执行【ant compile】命令开始编译;

  备注:第一次编译,耗时较长,需要耐心等待
  说明:打包好的solr-core-${VERSION}.jar需要和solr-core-4.7.2.jar进行对比,保证目录结构的一致性,否则可能不能用
  编译完成后,每个项目下会生成一个build文件夹,即编译后的class文件;

打包solr-core:

  进入【solr-4.7.2-src\solr-4.7.2\solr\build\solr-core\classes\java】目录,打开CMD命令行,执行以下命令开始打包:

jar cvfm solr-core-4.7.2.jar META-INF/MANIFEST.MF -C ./ .

  备注:jar命令使用帮助:jar -help

用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
  选项:
    -c 创建新档案
    -t 列出档案目录
    -x 从档案中提取指定的 (或所有) 文件
    -u 更新现有档案
    -v 在标准输出中生成详细输出
    -f 指定档案文件名
    -m 包含指定清单文件中的清单信息
    -n 创建新档案后执行 Pack200 规范化
    -e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
    -0 仅存储; 不使用任何 ZIP 压缩
    -P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M 不创建条目的清单文件
    -i 为指定的 jar 文件生成索引信息
    -C 更改为指定的目录并包含以下文件
    如果任何文件为目录, 则对其进行递归处理。
    清单文件名, 档案文件名和入口点名称的指定顺序与 'm', 'f' 和 'e' 标记的指定顺序相同。

    示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
      jar cvf classes.jar Foo.class Bar.class
    示例 2: 使用现有的清单文件 'mymanifest' 并
      将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
      jar cvfm classes.jar mymanifest -C foo/ .

打包solr.war:

  1.解压【solrcloud-4.7.2.zip】,进入【solrcloud-4.7.2\solrcloud-4.7.2】目录下,用新生成的solr-core-4.7.2.jar替换原来的jar包;
  2.打开CMD命令行,执行【ant】命令,打包文件,在当前目录下生成新的solr.war;

部署solr.war:

  1.上传solr.war到hadoop主机节点上;
  2.删除HDFS上旧的war:

hdfs dfs -rm /lib/jetty/solr.war

  3.上传新的war到HDFS上:

hdfs dfs -put solr.war /lib/jetty

后续工作:

  重新拉起data720,观察日志信息。

 

posted @ 2017-08-24 15:13  一珄筱歌  阅读(451)  评论(0)    收藏  举报