我正在尝试使用提供的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地狱检查,但是如何解决这个问题?
答案 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 JVM选项来实现。另外,可以在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
。