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

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

1. JDPA远程调试

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

 set JPDA_ADDRESS=
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"

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

二.Eclipse 的Solr环境搭建

2.1 Solr的编译

进入solr的目录,运行ant:

 :solr-4.8. rcf$ ant
Buildfile: /Users/rcf/workspace/java/solr/solr-4.8./build.xml -projecthelp:
[-] Buildfile: /Users/rcf/workspace/java/solr/solr-4.8./build.xml Main targets: check-svn-working-copy Checks the status of the SVN working copy
clean Clean Lucene and Solr build dirs
clean-eclipse Removes all Eclipse configuration files
clean-idea Removes all IntelliJ IDEA configuration files
clean-jars Remove all JAR files from lib folders in the checkout
clean-maven-build Clean up Maven POMs in working copy
clean-netbeans Removes all Netbeans configuration files
compile Compile Lucene and Solr
compile-test Compile Lucene and Solr tests and test-frameworks
documentation Generate Lucene and Solr Documentation
documentation-lint Validates the generated documentation (HTML errors, broken links,...)
eclipse Setup Eclipse configuration
generate-maven-artifacts Generate Maven Artifacts for Lucene and Solr
get-maven-poms Copy Maven POMs from dev-tools/maven/ to maven-build/
idea Setup IntelliJ IDEA configuration
ivy-bootstrap Download and install Ivy in the users ant lib dir
jar Build Lucene and Solr Jar files
jar-checksums Recompute SHA1 checksums for all JAR files.
jar-src Build Lucene and Solr Source Jar files
netbeans Setup Netbeans configuration
nightly-smoke Builds an unsigned release and smoke tests it
pitest Run PITest on both Lucene and Solr
precommit Run basic checks before committing
rat-sources Runs rat across all sources and tests
regenerate Runs all code regenerators
remove-maven-artifacts Removes all Lucene/Solr Maven artifacts from the local repository
resolve Resolves all dependencies
run-clover Runs all tests to measure coverage and generates report (pass "ANT_OPTS=-Xmx1536M" as environment)
run-maven-build Runs the Maven build using automatically generated POMs
test Test both Lucene and Solr
test-help Test runner help
test-with-heapdumps Runs tests with heap dumps on OOM enabled (if VM supports this)
validate Validate dependencies, licenses, etc.
validate-maven-dependencies Validates maven dependencies, licenses, etc.
Default target: -projecthelp BUILD SUCCESSFUL
Total time: 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,如下图所示

 :~ rcf$ cd /Users/rcf/workspace/java/solr/solr-4.8./solr
:solr rcf$ ls
CHANGES.txt README.txt build.xml contrib docs package solrj
LICENSE.txt SYSTEM_REQUIREMENTS.txt cloud-dev core example scripts test-framework
NOTICE.txt build common-build.xml dist licenses site webapp
:solr rcf$ ant dist
Buildfile: /Users/rcf/workspace/java/solr/solr-4.8./solr/build.xml
[echo] Building solr... init-dist: dist-solrj:
[echo] Building solr-solrj... check-lucene-core-uptodate: jar-lucene-core:

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

2.4 solr配置

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

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

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

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

 <?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:}</int>
<int name="connTimeout">${connTimeout:}</int>
</shardHandlerFactory>
</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

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

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

 <?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:}</int>
<int name="connTimeout">${connTimeout:}</int>
</shardHandlerFactory>
</solr>

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

    #  Logging level
solr.log=/Users/rcf/workspace/java/tomcat/apache-tomcat-8.0./logs
log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n #- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex= #- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN # set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

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

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

    Solr4.8.0源码分析(25)之SolrCloud的Split流程(一) 题记:昨天有位网友问我SolrCloud的split的机制是如何的,这个还真不知道,所以今天抽空去看了Split的原理,大 ...

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

    Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五) 题记:关于SolrCloud的Recovery策略已经写了四篇了,这篇应该是系统介绍Recovery策略的最后一篇了 ...

  3. Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四)

    Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四) 题记:本来计划的SolrCloud的Recovery策略的文章是3篇的,但是没想到Recovery的内容蛮多的,前面 ...

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

    Solr4.8.0源码分析(22)之SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及P ...

  5. Solr4.8.0源码分析(21)之SolrCloud的Recovery策略(二)

    Solr4.8.0源码分析(21)之SolrCloud的Recovery策略(二) 题记:  前文<Solr4.8.0源码分析(20)之SolrCloud的Recovery策略(一)>中提 ...

  6. Solr4.8.0源码分析(20)之SolrCloud的Recovery策略(一)

    Solr4.8.0源码分析(20)之SolrCloud的Recovery策略(一) 题记: 我们在使用SolrCloud中会经常发现会有备份的shard出现状态Recoverying,这就表明Solr ...

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

    Solr4.8.0源码分析(14) 之 SolrCloud索引深入(1) 上一章节<Solr In Action 笔记(4) 之 SolrCloud分布式索引基础>简要学习了SolrClo ...

  8. Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)

    Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2) 上一节主要介绍了SolrCloud分布式索引的整体流程图以及索引链的实现,那么本节开始将分别介绍三个索引过程即LogUpdat ...

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

    Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深 ...

随机推荐

  1. [置顶] 【Git入门之十五】Github操作指南

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12374633 最终篇,介绍一下Github网站的使用,主要是翻译为主,简化了 ...

  2. XQuery FLWOR 表达式

    FLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母缩写.for 语句把 bookstore 元素下的所有 book 元素提取到名为 ...

  3. 一个IT男的创业感言

    2014年的一月 我和高中的一个同学開始人生的第一次创业.就写点第一次创业的经验吧! 创业的最初 须要心中大概有个规划 这个规划可能是非常粗糙的 但大的方向一定要有.详细就是你进入的行业 行业已经存在 ...

  4. asp.net mvc vs web form

    译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...

  5. android 自定义progressDialog实现

    我们在项目中经常会遇到这样一个应用场景:执行某个耗时操作时,为了安抚用户等待的烦躁心情我们一般会使用进度条之类的空间,在android中让 大家最容易想到的就是progressbar或者progres ...

  6. Verilog之event的用法

    编写verilog的testbench时,可使用event变量触发事件. event变量声明为: event var; event触发为: ->var; 捕获触发为: @(var); 在mode ...

  7. 使用jq深入研究轮播图特性

    网站轮播图 太耳熟的词了  基本上做pc端的 主页绝壁会来一个轮播图的特效 轮播图他一个页面页面的切换,其实的原理是通过css的定位 ,定位到一起,第一张首先显示,其余默认隐藏. 今天我实现的这个轮播 ...

  8. 此方法显式使用的 CAS 策略已被 .NET Framework 弃用

    用vs2008开发的应用程序在vs2012中打开时提示如下: 此方法显式使用的 CAS 策略已被 .NET Framework 弃用.若要出于兼容性原因而启用 CAS 策略,请使用 NetFx40_L ...

  9. Ext4.1 Grid 分页查询

    转载:http://blog.csdn.net/zyujie/article/details/16362747 最近用Ext4.1自己做了做项目的练习:把一些知识点,在这里记录下来了! 上面一个for ...

  10. Xml解析之——Java/Android/Python

    Xml解析之——Java/Android/Python 一.Xml文件 test.xml <note> <to>George</to> <from>Jo ...