Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突。所以只能在Eclipse 搭建Solr的环境,折腾了一小时终于完成了。

1. JDPA远程调试

搭建换完成Solr环境后,对${TOMCAT_HOME}/bin/startup.sh 最后一行进行修改,如下所示:

1 set JPDA_ADDRESS=7070
2 exec "$PRGDIR"/"$EXECUTABLE" jpda  start "[email protected]"

后在eclipse新建debug配置,这样就可以远程调试solr了,要注意服务器端Solr.war包的代码与eclipse的Solr代码一致。

二.Eclipse 的Solr环境搭建

2.1 Solr的编译

进入solr的目录,运行ant:

 1 192:solr-4.8.0 rcf$ ant
 2 Buildfile: /Users/rcf/workspace/java/solr/solr-4.8.0/build.xml
 3
 4 -projecthelp:
 5         [-] Buildfile: /Users/rcf/workspace/java/solr/solr-4.8.0/build.xml
 6
 7 Main targets:
 8
 9  check-svn-working-copy       Checks the status of the SVN working copy
10  clean                        Clean Lucene and Solr build dirs
11  clean-eclipse                Removes all Eclipse configuration files
12  clean-idea                   Removes all IntelliJ IDEA configuration files
13  clean-jars                   Remove all JAR files from lib folders in the checkout
14  clean-maven-build            Clean up Maven POMs in working copy
15  clean-netbeans               Removes all Netbeans configuration files
16  compile                      Compile Lucene and Solr
17  compile-test                 Compile Lucene and Solr tests and test-frameworks
18  documentation                Generate Lucene and Solr Documentation
19  documentation-lint           Validates the generated documentation (HTML errors, broken links,...)
20  eclipse                      Setup Eclipse configuration
21  generate-maven-artifacts     Generate Maven Artifacts for Lucene and Solr
22  get-maven-poms               Copy Maven POMs from dev-tools/maven/ to maven-build/
23  idea                         Setup IntelliJ IDEA configuration
24  ivy-bootstrap                Download and install Ivy in the users ant lib dir
25  jar                          Build Lucene and Solr Jar files
26  jar-checksums                Recompute SHA1 checksums for all JAR files.
27  jar-src                      Build Lucene and Solr Source Jar files
28  netbeans                     Setup Netbeans configuration
29  nightly-smoke                Builds an unsigned release and smoke tests it
30  pitest                       Run PITest on both Lucene and Solr
31  precommit                    Run basic checks before committing
32  rat-sources                  Runs rat across all sources and tests
33  regenerate                   Runs all code regenerators
34  remove-maven-artifacts       Removes all Lucene/Solr Maven artifacts from the local repository
35  resolve                      Resolves all dependencies
36  run-clover                   Runs all tests to measure coverage and generates report (pass "ANT_OPTS=-Xmx1536M" as environment)
37  run-maven-build              Runs the Maven build using automatically generated POMs
38  test                         Test both Lucene and Solr
39  test-help                    Test runner help
40  test-with-heapdumps          Runs tests with heap dumps on OOM enabled (if VM supports this)
41  validate                     Validate dependencies, licenses, etc.
42  validate-maven-dependencies  Validates maven dependencies, licenses, etc.
43 Default target: -projecthelp
44
45 BUILD SUCCESSFUL
46 Total time: 0 seconds

运行 ant eclipse就可以对solr源码进行编译成eclipse工程。在编译ant eclipse时候可能会失败,这是可以运行 ant ivy-bootstrap

2.2 将eclipse工程转换成WEB工程

将编译好的solr工程导入eclipse,后右键点击Properties,选中Project Facets,如图所示

选择OK后,就转换Solr的WEB工程了,这是有些xml文件会出现错误的红叉叉,不用管它。

2.3 solr.war包生成

进入solr/solr目录,运行ant dist,如下图所示

 1 192:~ rcf$ cd /Users/rcf/workspace/java/solr/solr-4.8.0/solr
 2 192:solr rcf$ ls
 3 CHANGES.txt        README.txt        build.xml        contrib            docs            package            solrj
 4 LICENSE.txt        SYSTEM_REQUIREMENTS.txt    cloud-dev        core            example            scripts            test-framework
 5 NOTICE.txt        build            common-build.xml    dist            licenses        site            webapp
 6 192:solr rcf$ ant dist
 7 Buildfile: /Users/rcf/workspace/java/solr/solr-4.8.0/solr/build.xml
 8      [echo] Building solr...
 9
10 init-dist:
11
12 dist-solrj:
13      [echo] Building solr-solrj...
14
15 check-lucene-core-uptodate:
16
17 jar-lucene-core:

编译完成后会再dist目录下生产solr.war包

2.4 solr配置

1. 将solr.war copy到solr/WebContent目录下并进行解压。

2. 在WebRoot/META-INF目下创建context.xml 文件,配置solr/home。

1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
2 <Context>
3          <Environment name="solr/home" type="java.lang.String" value="/Users/rcf/workspace/java/solr/Solr" override="true" />
4 </Context> 

3. 创建solr/home,在里面放入solr.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <solr>
 3     <solrcloud>
 4         <str name="host">${host:}</str>
 5         <int name="hostPort">${jetty.port:8983}</int>
 6         <str name="hostContext">${hostContext:solr}</str>
 7         <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
 8         <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
 9     </solrcloud>
10     <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
11         <int name="socketTimeout">${socketTimeout:0}</int>
12         <int name="connTimeout">${connTimeout:0}</int>
13     </shardHandlerFactory>
14  </solr>

4.这样就可以进行调试solr了。

三.Solr环境搭建

真实的solr环境搭建,跟eclipse的环境搭建类似,主要分为以下几步:

1. 对solr源码进行编译,ant dist生成solr.war

2. 下载tomcat并进行安装(tomcat的配置并不需要修改)

3. 将solr.war 复制到 ${TOMCAT_HOME}/wepapps目录下并将solr.war包解压成solr目录

4. 将solr/dist目录下的jar包全部拷贝到${TOMCAT_HOME}/wepapps/solr/lib目录下

5. 在${TOMCAT_HOME}/conf/Catalina/localhost/创建solr.xml,里面设置了solr/home

1 <Context docBase="/Users/rcf/workspace/java/tomcat/apache-tomcat-8.0.9/webapps/solr.war" debug="0" crossContext="true" >
2      <Environment name="solr/home" type="java.lang.String" value="/Users/rcf/workspace/java/solr/Solr" override="true" />
3 </Context>

6. 创建solr/home,也创建solr.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2  <solr>
 3      <solrcloud>
 4          <str name="host">${host:}</str>
 5          <int name="hostPort">${jetty.port:8983}</int>
 6          <str name="hostContext">${hostContext:solr}</str>
 7          <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
 8          <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
 9      </solrcloud>
10      <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
11          <int name="socketTimeout">${socketTimeout:0}</int>
12          <int name="connTimeout">${connTimeout:0}</int>
13      </shardHandlerFactory>
14   </solr>

7. 在将solr源码包里的log4j.properties 拷贝到${TOMCAT_HOME}/lib目录下,并修改log文件路径

 1   1 #  Logging level
 2   2 solr.log=/Users/rcf/workspace/java/tomcat/apache-tomcat-8.0.9/logs
 3   3 log4j.rootLogger=INFO, file, CONSOLE
 4   4
 5   5 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 6   6
 7   7 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 8   8 log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
 9   9
10  10 #- size rotation with log cleanup.
11  11 log4j.appender.file=org.apache.log4j.RollingFileAppender
12  12 log4j.appender.file.MaxFileSize=4MB
13  13 log4j.appender.file.MaxBackupIndex=9
14  14
15  15 #- File to log to and log format
16  16 log4j.appender.file.File=${solr.log}/solr.log
17  17 log4j.appender.file.layout=org.apache.log4j.PatternLayout
18  18 log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
19  19
20  20 log4j.logger.org.apache.zookeeper=WARN
21  21 log4j.logger.org.apache.hadoop=WARN
22  22
23  23 # set to INFO to enable infostream log messages
24  24 log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建,布布扣,bubuko.com

时间: 2024-10-15 22:10:59

Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建的相关文章

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇

Solr4.8.0源码分析(10)之Lucene的索引文件(3)

Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这两个文件.由于本文介绍的Solr4.8.0,所以对应的是SegmentInfoFormat的子类Lucene46SegmentInfoFormat. 首先来看下.si文件的格式 头部(header) 版本(SegVersion) doc个数(SegSize) 是否符合文档格式(IsCompoundF

Solr4.8.0源码分析(25)之SolrCloud的Split流程

Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大致也了解split的原理了,所以也就有了这篇文章.本系列有两篇文章,第一篇为core split,第二篇为collection split. 1. 简介 这里首先需要介绍一个比较容易混淆的概念,其实Solr的HTTP API 和 SolrCloud的HTTP API是不一样,如果接受到的是Solr的

Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五)

Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五) 题记:关于SolrCloud的Recovery策略已经写了四篇了,这篇应该是系统介绍Recovery策略的最后一篇了.本文主要介绍Solr的主从同步复制.它与前文<Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三)>略有不同,前文讲到的是SolrCloud的leader与replica之间的同步,不需要通过配置solrconfig.xml来实现.而本文主要介绍单机模式下,利用so

Solr4.8.0源码分析(19)之缓存机制(二)

Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深入的来介绍下Solr的四种缓存类型,以及两种SolrCache接口实现类. 1.SolrCache接口实现类 前文已经提到SolrCache有两种接口实现类:solr.search.LRUCache 和 solr.search.LRUCache. 那么两者具体有啥区别呢? 1.1 solr.search.LR

Solr4.8.0源码分析(17)之SolrCloud索引深入(4)

Solr4.8.0源码分析(17)之SolrCloud索引深入(4) 前面几节以add为例已经介绍了solrcloud索引链建索引的三步过程,delete以及deletebyquery跟add过程大同小异,这里暂时就不介绍了.由于commit流程较为特殊,那么本节主要简要介绍下commit的流程. 1. SolrCloud的commit流程 SolrCloud的commit流程同样分为三步,本节主要简单介绍下三步过程. 1.1 LogUpdateProcessor LogUpdateProces

Solr4.8.0源码分析(14)之SolrCloud索引深入(1)

Solr4.8.0源码分析(14) 之 SolrCloud索引深入(1) 上一章节<Solr In Action 笔记(4) 之 SolrCloud分布式索引基础>简要学习了SolrCloud的索引过程,本节开始将通过阅读源码来深入学习下SolrCloud的索引过程. 1. SolrCloud的索引过程流程图 这里借用下<solrCloud Update Request Handling 更新索引流程>流程图: 由上图可以看出,SolrCloud的索引过程主要通过一个索引链过程来实

Solr4.8.0源码分析(12)之Lucene的索引文件(5)

Solr4.8.0源码分析(12)之Lucene的索引文件(5) 1. 存储域数据文件(.fdt和.fdx) Solr4.8.0里面使用的fdt和fdx的格式是lucene4.1的.为了提升压缩比,StoredFieldsFormat以16KB为单位对文档进行压缩,使用的压缩算法是LZ4,由于它更着眼于速度而不是压缩比,所以它能快速压缩以及解压. 1.1 存储域数据文件(.fdt) 真正保存存储域(stored field)信息的是fdt文件,该文件存放了压缩后的文档,按16kb或者更大的模块大

Solr4.8.0源码分析(11)之Lucene的索引文件(4)

Solr4.8.0源码分析(11)之Lucene的索引文件(4) 1. .dvd和.dvm文件 .dvm是存放了DocValue域的元数据,比如DocValue偏移量. .dvd则存放了DocValue的数据. 在Solr4.8.0中,dvd以及dvm用到的Lucene编码格式是Lucene45DocValuesFormat.跟之前的文件格式类似,它分别包含Lucene45DocValuesProducer 和Lucene45DocValuesConsumer来实现该文件的读和写. 1 @Ove