Проблема с плагином в es2.0


(Dimous) #1

Здравствуйте
Я написал плагин импорта данных, который регистрируется как REST-сервис. Совсем недавно ввели проверку plugin-descriptor.properties.

Я создал дескриптор:

jvm = true
site = false
version = 1.0
classname = io.github.dimous.plugins.ImportPlugin
description = xxx import
java.version = 1.8
elasticsearch.version = 2.0.0-beta1-SNAPSHOT

es-plugin.properties:

plugin = io.github.dimous.plugins.ImportPlugin

При запуске в консоль выбрасываются исключения:

[2015-07-28 19:56:32,025][WARN ][plugins ] [Overmind] failed to
load plugin from [[]]
ElasticsearchException[Failed to load plugin class [io.github.dimous.plugins.ImportPlugin]]; nested: ClassNotFoundException[io.github.dimous.plugins.ImportPlugin];
at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.ja
va:408)
at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.j
ava:377)
at org.elasticsearch.plugins.PluginsService.(PluginsService.java:1
08)
at org.elasticsearch.node.Node.(Node.java:147)
at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:157)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:176)
at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:277)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:28)

Caused by: java.lang.ClassNotFoundException: io.github.dimous.plugins.ImportPlugin
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:810)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.elasticsearch.plugins.PluginsService.loadPlugin(PluginsService.ja
va:393)
... 7 more

Также писал в дескрипторе просто "ImportPlugin", без полного имени - та же ошибка.
До ввода файла дескриптора, плагин работал.

package io.github.dimous.plugins;

import io.github.dimous.plugins.rest.ImportRestHandler;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;

public final class ImportPlugin extends AbstractPlugin {
@Override
public String name() {
return "import plugin";
}
//---

@Override
public String description() {
    return "Сервис импорта данных из ";
}
//---

public void onModule(final RestModule rest_module) {
    rest_module.addRestAction(ImportRestHandler.class);
} 

}

ImportRestHandler лежит в своём пакете, расширяет BaseRestHandler. Короче, всё по канонам.
Запускаю под Win 8.1 64
Сейчас слил свежий снепшот, собрал, пересобрал и переустановил плагин, проблема сохранилась.


(Igor Motov) #2

Сложно так что-то сказать. Я попробовал ваш дескриптор с одним из моих плагинов - все вроде работает как положено. Вы не могли бы выложить проект где-нибудь, который демонстрировал бы проблему?


(Dimous) #3

Здравствуйте, Игорь

Для чистоты эксперимента я удалил логику. Скомпилировал и установил. Проблема повторилась - значит логика тут ни при чём.

http://dimous.github.io/demo/plugin-descriptor.properties
http://dimous.github.io/demo/es-plugin.properties

http://dimous.github.io/demo/io/github/dimous/plugins/ImportPlugin.java
http://dimous.github.io/demo/io/github/dimous/plugins/rest/ImportRestHandler.java

http://dimous.github.io/demo/ImportPlugin.jar

Устанавливаю командой - D:\elasticsearch-2.0.0-beta1-SNAPSHOT\bin\plugin install ImportPlugin -u file:////C:\Users****.ivy2\Desktop\ImportPlugin\dist\ImportPlugin.jar

В папке плагинов появляется папка ImportPlugin.
Хочу ещё раз подчеркнуть - плагин работал на снепшоте 2.0.0-beta1 до версии с плагин-дескриптором. Буквально каждый день сливал изменения, собирал и проверял.


(Igor Motov) #4

А что происходит если убрать es-plugin.properties и plugin-descriptor.properties из ImportPlugin.jar и поместить plugin-descriptor.properties в ImportPlugin.zip архив? То есть ImportPlugin.zip должен содержать два файла: ImportPlugin.jar и plugin-descriptor.properties, и устанавливть надо будет ImportPlugin.zip.


(Dimous) #5

Ура!
Заработало!
Спасибо!


(system) #6