2017-02-23 9 views
0

私はしばらくの間ネイティブ(Java)スクリプトに苦労してきました。私はMavenを使ってカスタムスコアプラグインとビルドを書いています。私は私のプロジェクトを構築しながら、次のエラーを取得してM>Elasticsearch:ネイティブ(Java)スクリプトが動作しない

description=Custom score script for peopleworld 
version=0.1 
name=NativeScriptPlugin 
classname=org.elasticsearch.plugin.hw.customscore.NativeScriptPlugin 
java.version=1.8 
elasticsearch.version=5.2.1 

- >

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven- v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.elasticsearch.plugin.hirewand.customscore</groupId> 
    <artifactId>NativeScriptPlugin</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>NativeScriptPlugin</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <jdk.version>1.8</jdk.version> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.elasticsearch</groupId> 
     <artifactId>elasticsearch</artifactId> 
     <version>5.2.1</version> 
    </dependency> 
    </dependencies> 
</project> 

plugin-descriptor.properties - 私のJavaクラスは、この

package org.elasticsearch.plugin.hw.customscore; 

import java.util.Collections; 
import java.util.List; 
import java.util.Map; 

import org.elasticsearch.plugins.Plugin; 
import org.elasticsearch.plugins.ScriptPlugin; 
import org.elasticsearch.common.Nullable; 
import org.elasticsearch.script.*; 

public class HW_NativeScriptPlugin extends Plugin implements ScriptPlugin { 

@Override 
public List<NativeScriptFactory> getNativeScripts() { 
    return Collections.singletonList(new HW_NativeScriptFactory()); 
} 

public static class HW_NativeScriptFactory implements NativeScriptFactory { 
    @Override 
    public ExecutableScript newScript(@Nullable Map<String, Object> params)  { 
     return new HW_NativeScript(); 
    } 
    @Override 
    public boolean needsScores() { 
     return false; 
    } 
    @Override 
    public String getName() { 
     return "HW_SCRIPT"; 
    } 
} 

public static class HW_NativeScript extends AbstractDoubleSearchScript { 
    @Override 
    public double runAsDouble() { 
     double a = 1; 
     double b = 2; 
     return a * b; 
    } 
} 
} 

のpom.xmlのように見えます

[エラー]

E:\ESPlugin\NativeScriptPlugin\src\main\java\org\elasticsearch\plugin\hw\customscore\HW_NativeScriptPlugin.java:[16,40] error: incompatible types: List<HW_NativeScriptFactory> cannot be converted to List<NativeScriptFactory> 
[ERROR] -> [Help 1] 

ここで間違っていることを誰かが指摘できますか?

+0

前述のように、Java 8に変更すると問題は解決するはずですが、できない場合は[javaの一般的な共分散](https://briangordon.github.io/2014/09/covariance-and-contravariance)を参照してください。 .html) –

+0

ありがとうジョー、修正は私の問題を解決しました。 –

答えて

2

あなたはこのようなJava 8のようにMavenのためのターゲットバージョンを指定します場合、これは簡単に解決することができます。

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>${jdk.version}</source> 
        <target>${jdk.version}</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

私はちょうど簡潔な方法でバージョンを制御する上で、あなたが宣言した${jdk.version}プロパティを使用していました。

このxml-snippetをdependenciesセクションの直後に追加すると、コンパイルの問題が解決するはずです。

+0

多くの人に感謝、あなたは私の一日を作った。好奇心の理由から、ターゲットバージョンをpom.xmlに指定する必要があるのはなぜですか(これはMavenの新機能です)。 –

+0

MavenのデフォルトのJDKターゲットは1.5だと思います。しかし、Java 5ではコードをコンパイルすることができません。これは、新しいターゲット(> = 6)を使用するためのヒントです。ここでは、@Overrideアノテーションをインタフェースなどに入れることができます。 –

関連する問題