使用IntelliJ中的Elasticsearch测试框架,如何解决关于idea_rt.jar的问题?

时间:2018-06-26 14:21:01

标签: elasticsearch intellij-idea kotlin

我正在尝试使用提供的Elasticsearch Java测试框架对我的es项目进行一些集成测试。 我在IntelliJ中有一个非常简单的测试设置:

if (PerchUtil::count($members)) {

echo '[';

foreach ($members as $Member) {
  //prepare the data
  $data = array(
    'ID' => $Member->memberID(),
    'Name' => $Member->first_name() . ' ' . $Member->last_name(),
    'Job Title' => $Member->expert_job_title(),
    'Organisation' => $Member->expert_org_name(),
    'Organisation Type' => $Member->expert_org_type(),
    'Latitude' => $Member->expert_org_latitude(),
    'Longitude' => $Member->expert_org_longitude()
  );
}
echo ']';
}

header('Content-Type: application/json');

但是,运行此命令时,出现以下异常:

[{
    "ID": "4",
    "Name": "Jill Higgins",
    "Job Title": "Designer",
    "Organisation": "CPI",
    "Organisation Type": "Academia",
    "Latitude": "54.669978",
    "Longitude": "-1.452469"
},{
    "ID": "5",
    "Name": "Bob Billy",
    "Job Title": "Clown",
    "Organisation": "Big Comp INC",
    "Organisation Type": "Company",
    "Latitude": "54.669978",
    "Longitude": "-1.452469"
},]

我找到了一些方法来绕过jar地狱检查,但是如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

偶然发现我遇到了同样的问题:https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#configuring-ides-and-running-tests

尤其是,我必须设置idea.no.launcher=true并重新启动IntelliJ。

  

为了直接从IDEA 2017.2及更高版本运行测试,必须禁用IDEA运行启动程序,以避免idea_rt.jar引起“ jar hell”。这可以通过添加-Didea.no.launcher = true J​​VM选项来实现。另外,可以在idea.properties中设置idea.no.launcher = true

此外,您可能需要:

  

对于IDEA 2017.3及更高版本,除了JVM选项外,您还需要转到“运行”->“编辑配置”-> ...->“默认值”->“ JUnit”,并验证“缩短”命令行设置是否设置为user -local默认值:无。如果报告为jar hell的来源,则可能还需要从类路径中删除ant-javafx.jar。

最后,请确保您具有以下主张:

  

Elasticsearch代码库大量使用Java断言,并且测试运行程序要求在JVM中启用断言。这可以通过在启动时将标志-ea传递给JVM来实现。

答案 1 :(得分:1)

由于我对类路径的长度感到惊讶,因此我尝试使用有效的shorten command line选项。

编辑您的运行配置,并将Shorten command line字段设置为JAR manifest