解压完成后,分为几个目录,然而solr是通过ant编译的,我们想将其转换为maven方式,发现其中存在dev-tools/maven中,其中对应的说明:
 
Copy the Maven POM templates from under dev-tools/maven/ to the
maven-build/ directory using the following command from the top-level
directory: ant get-maven-poms Note that you will need to do this whenever changes to the POM
templates are committed. For this reason, it's a good idea run
"ant get-maven-poms" after you update from origin.
 
在源代码的顶级目录中执行:
 
ant get-maven-poms,提示会查找ivy,没有安装,于是从ivy的官网下载。ivy属于ant的一个插件,需要将jar包copy到ant安装目录下的lib中,此时执行该命令后,就可以执行build。关于ivy的介绍,可以参考:http://www.cnblogs.com/ungshow/archive/2009/07/08/1519111.html
 
 
ant get-maven-poms
Buildfile: /Users/mazhiqiang/develop/study/solr-5.5.0/build.xml resolve: resolve: ivy-availability-check: ivy-fail: ivy-configure:
[ivy:configure] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = /Users/xxx/develop/study/solr-5.5.0/lucene/ivy-settings.xml resolve:
[ivy:retrieve] downloading https://repo1.maven.org/maven2/junit/junit/4.10/junit-4.10.jar ...
[ivy:retrieve] ................. (247kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve] [SUCCESSFUL ] junit#junit;4.10!junit.jar (3616ms)
[ivy:retrieve] downloading https://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.3.2/randomizedtesting-runner-2.3.2.jar ...
[ivy:retrieve] ................ (232kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve] [SUCCESSFUL ] com.carrotsearch.randomizedtesting#randomizedtesting-runner;2.3.2!randomizedtesting-runner.jar (2142ms) ivy-availability-check:
…. -append-module-dependencies-properties:
[echo] Get maven dependencies called under: /Users/mazhiqiang/develop/study/solr-5.5.0/lucene/.. -get-maven-poms:
[copy] Copying 57 files to /Users/mazhiqiang/develop/study/solr-5.5.0/maven-build BUILD SUCCESSFUL
Total time: 20 minutes 13 seconds
 
经过几次失败后,折腾一个小时,终于成功。ivy也比较类似maven,但是使用的仓库在用户目录/.ivy/下。
 
生成的pom文件按照工程的目录,已经放到了maven-build目录下,直接将其copy至顶层目录,本人的环境配置中使用的solr版本为5.5.0,但是发现生成的pom.xml用idea导入后问题非常多,不能直接启动。
 
 
 
不管用什么IDE首选都要设置Solr Home在IDE的JVM参数设置VM arguments写入 -Dsolr.solr.home=solr/example/solr一般就行了.不行也可以使用绝对路径.
 
solr使用StartSolrJetty文件作为入口文件进行调试代码,在这里可以设置服务器使用的端口和solr的webapps目录.一般都不用设置,默认的就可以进行调试.Solr Home也能可在代码中设置一样好用.  System.setProperty("solr.solr.home", "E:\\Work\\solr-4.2.0-src-idea\\solr\\example\\solr");
 
目前是使用自带的一个example作为solr配置的根目录,如果你有其他的solr配置目录,设置之即可。点击run即可,debug也是一样可以用了。没有别的问题就应该能运行了.注意servlet 容器使用的端口,如查提示:
 
FAILED SocketConnector@0.0.0.0:8983: java.net.BindException: Address already in use: JVM_Bind 就说明当前端口占用中.改一下就可以了.如果没有报错启动成功后就可以在浏览器中输入地址: http://localhost:8983/solr/ 就可以看到如下界面
 


 
 
 
 
从github上fork一个lucene-solr的项目:https://github.com/clamaa/lucene-solr,这个版本是6的,所以跟之前用到的有些jar包可能不太兼容(一些Deprecated的类已经被删除)。
 

使用idea启动

 
下载solr源码后,如果使用idea IDE作为启动容器,现在根目录下执行 ant idea,再启动StartSolrJetty.main函数即可。
 
resolve:

idea:
[copy] Copying 81 files to /Users/xxx/develop/workspace/github/lucene-solr -post-idea-instructions:
[echo]
[echo] To complete IntelliJ IDEA setup, you must manually configure
[echo] File | Project Structure | Project | Project SDK.
[echo]
[echo] You won't have to do this in the future if you define property
[echo] ${idea.jdk}, e.g. in ~/lucene.build.properties, ~/build.properties
[echo] or lucene/build.properties, with a value consisting of the
[echo] following two XML attributes/values (adjust values according to
[echo] JDKs you have defined locally - see
[echo] File | Project Structure | Platform Settings | SDKs):
[echo]
[echo] idea.jdk = project-jdk-name="1.8" project-jdk-type="JavaSDK"
[echo] BUILD SUCCESSFUL
Total time: 3 minutes 9 seconds
用idea导入项目后,可以直接查看所有的java类以及配置文件信息。
 
修改SolrDispatchFilter, 理论上是需要读取当前ServletContext上下文中的solr.solr.home属性,我们这里将其直接修改为一个本地绝对路径,以便能够直接启动:
 
//      String solrHome = (String) config.getServletContext().getAttribute(SOLRHOME_ATTRIBUTE);
String solrHome = "/Users/xxx/develop/workspace/github/lucene-solr/solr/server/solr";
 
org.apache.solr.client.solrj.StartSolrJetty作为启动类,需要修改一下    bb.setWar("solr/webapp/web”)。
 
 
打印出如下信息后,启动成功:
 
objc[5820]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Connected to the target VM, address: '127.0.0.1:61273', transport: 'socket'
0 INFO (main) [ ] o.e.j.u.log Logging initialized @975ms
292 INFO (main) [ ] o.e.j.s.Server jetty-9.3.8.v20160314
>>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP
633 INFO (main) [ ] o.e.j.w.StandardDescriptorProcessor NO JSP Support for /solr, did not find org.eclipse.jetty.jsp.JettyJspServlet
697 INFO (main) [ ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init(): sun.misc.Launcher$AppClassLoader@58644d46
773 INFO (main) [ ] o.a.s.c.SolrResourceLoader new SolrResourceLoader for directory: '/Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr'
9565 INFO (main) [ ] o.a.s.c.SolrResourceLoader JNDI not configured for solr (NoInitialContextEx)
9565 INFO (main) [ ] o.a.s.c.SolrResourceLoader solr home defaulted to 'solr/' (could not find system property or JNDI)
9582 INFO (main) [ ] o.a.s.c.SolrXmlConfig Loading container configuration from /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/solr.xml
9785 INFO (main) [ ] o.a.s.c.CorePropertiesLocator Config-defined core root directory: /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr
9853 INFO (main) [ ] o.a.s.c.CoreContainer New CoreContainer 313239742
9853 INFO (main) [ ] o.a.s.c.CoreContainer Loading cores into CoreContainer [instanceDir=/Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr]
9855 WARN (main) [ ] o.a.s.c.CoreContainer Couldn't add files from /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/lib to classpath: /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/lib
9893 INFO (main) [ ] o.a.s.h.c.HttpShardHandlerFactory created with socketTimeout : 600000,connTimeout : 60000,maxConnectionsPerHost : 20,maxConnections : 10000,corePoolSize : 0,maximumPoolSize : 2147483647,maxThreadIdleTime : 5,sizeOfQueue : -1,fairnessPolicy : false,
10404 INFO (main) [ ] o.a.s.u.UpdateShardHandler Creating UpdateShardHandler HTTP client with params:
10408 INFO (main) [ ] o.a.s.l.LogWatcher SLF4J impl is org.slf4j.impl.Log4jLoggerFactory
10409 INFO (main) [ ] o.a.s.l.LogWatcher Registering Log Listener [Log4j (org.slf4j.impl.Log4jLoggerFactory)]
10415 INFO (main) [ ] o.a.s.c.CoreContainer Security conf doesn't exist. Skipping setup for authorization module.
10416 INFO (main) [ ] o.a.s.c.CoreContainer No authentication plugin used.
10615 INFO (main) [ ] o.a.s.c.CorePropertiesLocator Looking for core definitions underneath /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr
10658 INFO (main) [ ] o.a.s.c.CorePropertiesLocator Found 0 core definitions
10746 INFO (main) [ ] o.a.s.s.SolrDispatchFilter user.dir=/Users/mazhiqiang/develop/workspace/github/lucene-solr
10746 INFO (main) [ ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init() done
10772 INFO (main) [ ] o.e.j.s.h.ContextHandler Started o.e.j.w.WebAppContext@2e6a5539{/solr,file:///Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/webapp/web/,AVAILABLE}{solr/webapp/web}
10802 INFO (main) [ ] o.e.j.s.ServerConnector Started ServerConnector@6436a7db{HTTP/1.1,[http/1.1]}{0.0.0.0:8983}
10802 INFO (main) [ ] o.e.j.s.Server Started @11904ms
 
 
如果我们之前启动的项目需要用到mmseg4j分词器,需要将这些jar包同样加入我们的classpath中,否则会爆出下面的错误:
 
Caused by: java.lang.ClassNotFoundException: com.chenlb.mmseg4j.solr.MMSegTokenizerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:520)
 
将必要的jar包放到idea的classpath中之后,启动就不会出现问题,可以正常通过web端( http://localhost:8983/solr)来启动solr服务并调试了。 
 
Solr的启动过程主要包括:
 
1. 获取SolrHome:分别先后通过JNDI,System property,default directory三种方式尝试获取
2. 实例化启动过程中使用的类加载器SolrResourceLoader
3. 加载solrhome下的solr.xml文件,封装为ConfigSolr
4. 实例化一个CoreContainer,通过CoreContainer来加载cores
5. 遍历SolrHome,当寻找到含有core.properties的文件夹,则作为一个core
6. 多线程加载cores
7. 加载每个core时先加载solrconfig.xml封装为SolrConfig
8. 再加载schema.xml封装为IndexSchema
9. 最后实例化SolrCore
 

本地通过源码方式启动solr的更多相关文章

  1. ubuntu 16.04通过源码方式安装nginx

    1.下载nginx源码包 wget  http://nginx.org/download/nginx-1.11.12.tar.gz 2.解压该tar包 tar zxvf nginx-1.11.12.t ...

  2. 通过源码成功启动odoo 10.0

  3. 如何通过源码包的方式在linux安装python36

    背景: python34的安装非常简单,直接用yum就可以安装,但是安装最新版的python36通过yum方式是不行的,需要通过源码包进行安装 具体步骤如下: 1.安装openssl静态库[pip3安 ...

  4. 通过源码安装PostgresSQL

    通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...

  5. 通过源码分析Java开源任务调度框架Quartz的主要流程

    通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...

  6. Kafka详解六:Kafka如何通过源码实现监控

    问题导读: 1.kafka的消费者组的消费偏移存储,kafka支持两个版本?        2.ConsumerOffsetChecker类的作用是什么?        3.Kafka如何通过源码实现 ...

  7. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

  8. Linux下通过源码编译安装程序

    本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...

  9. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

随机推荐

  1. HDU 4489 The King’s Ups and Downs

    http://acm.hdu.edu.cn/showproblem.php?pid=4489 题意:有n个身高不同的人,计算高低或低高交错排列的方法数. 思路:可以按照身高顺序依次插进去. d[i][ ...

  2. Java中代码点与代码单元(转)

    摘要 本文介绍 Java 平台支持增补字符的方式.增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法在 Java 编程语言中描述为单个的 16 位实体(例如char数据类 ...

  3. Leetcode 16

    //一次AC 有点爽的class Solution { public: int threeSumClosest(vector<int>& nums, int target) { ; ...

  4. 从 TWAIN 设备中扫描图像

    转自(http://yonsm.net/scan-images-from-a-twain-device/) 一.简介 TWAIN 数据源管理程序 (DSM) 工业标准的软件库,用于从静态图像设备提取图 ...

  5. linux 网络测试命令 长期更新

    一.网络测试命令 1.测试 网络连接 发送两包后停发 [oracle@hadoop ~]$ PING www.a.shifen.com (() bytes of data. bytes from tt ...

  6. PHP中实用的模式之【门面模式】

           author:胡旭个人博客        blog:http://www.ihuxu.com        欢迎关注~~~~ 对于一些逻辑稍微复杂的程序,很难避免出现在不某个类中无法访问 ...

  7. L205 EE

    As an Electrical Engineer at P, you will: Design, build, and verify PCBAsCreate, modify, and update ...

  8. UVA-11478 Halum【二分】【差分约束】

    LINK1 LINK2 题目大意 给你一个n个点,m条边的有向图 有一种操作把所有到达这个点的边全部减小d,把所有从从这个点出发的边加上d 问最后是否可以让所有边的边权最小值最大 如果可以无限大,输出 ...

  9. C#修改注册表

    某次需要使用C#对注册表进行操作,不过却发现没有权限,研究了以下发现是当前系统用户的问题.除非当前系统用户是Administrator,否则就会给你抛出一个异常.后来在网上发现了一个方法,原来C#也可 ...

  10. 浅谈一致性Hash原理及应用

    在讲一致性Hash之前我们先来讨论一个问题. 问题:现在有亿级用户,每日产生千万级订单,如何将订单进行分片分表? 小A:我们可以按照手机号的尾数进行分片,同一个尾数的手机号写入同一片/同一表中. 大佬 ...