ElasticSearch 源码分析 环境入门

       现在网上对于ElasticSearch(ES)方面的资料很少,而且对于ES源码方面的资料也很少,我自己看了一下ES源码,也不知道我的理解是不是正确的,就想把我自己的一些理解贴出来,一起探讨一下,希望如果发现错误跟及时给我留言,我们一起研究,共同进步。

       ES我就不介绍了http://baike.baidu.com/view/8005387.htm这里有详细.

       首先我们要知道几个网址:

       http://www.elasticsearch.org/  官方网址

       http://s.medcl.net/    ES中文资料

       https://github.com/elasticsearch/elasticsearch   源码下载地址

   我的开发环境是 Eclipse+Maven ,首先我们先把源码下载下来,再执行"mvn package -DskipTests ",成功了?反正我是失败了,编译出错

[ERROR] ...\elasticsearch-src\elasticsearch\src\main\java
\org\elasticsearch\search\internal\InternalSearchHits.java:[23,0] 找不到符号
[ERROR] 符号: 静态 readSearchHit
 

     查看了一下源码23行是静态导入,这是编译环境问题先用Eclipse编译,再继续,搞定。

     通过上面的步骤源码就可以被跑起来了,打开    bin\elasticsearch.bat

"%JAVA_HOME%\bin\java" %JAVA_OPTS% %ES_JAVA_OPTS% %ES_PARAMS% %* -cp "%ES_CLASSPATH%" "org.elasticsearch.bootstrap.ElasticSearch"

     可以明显看出启动类为:

org.elasticsearch.bootstrap.ElasticSearch

  而ElasticSearch.java类很简单

public class ElasticSearch extends Bootstrap {

    public static void close(String[] args) {
        Bootstrap.close(args);
    }

    public static void main(String[] args) {
        Bootstrap.main(args);
    }
}
 

    直接调用的是Bootstrap.main方法,也就是说我们直接运行Bootstrap类,跟运行ElasticSearch是一样的。我以Bootstrap类启动为例,运行后大家会发现控制台没有输出,我开始以为是log4j配置问题, 找到org.elasticsearch.common.logging.log4j.LogConfigurator  发现配置应该不可能有问题,最后在Bootstrap类找到了原因

 boolean foreground = System.getProperty("es.foreground", System.getProperty("es-foreground")) != null;
        // handle the wrapper system property, if its a service, don't run as a service
if (System.getProperty("wrapper.service", "XXX").equalsIgnoreCase("true")) {
            foreground = false;
}
...
 if (!foreground) {
                Loggers.disableConsoleLogging();
                System.out.close();
  }
 

foreground为false 把控制台关闭了,把foreground设置为true即可,源码环境就搭建完了。

猜你喜欢

转载自wjboy49.iteye.com/blog/1602107