Как запустить Groovy в Java - PullRequest
0 голосов
/ 03 июля 2018

Привет, все безуспешно пробовали разные способы запустить отличную версию в Java, прочитали некоторую документацию, но на данный момент все не так ясно.

Кто-нибудь может знать, как запустить этот класс?

package com.test.dev.search;

public class SearchQueryBase implements SearchQuery {    

    public QueryString getMatterQuery( SearchFilter filter ) {
        String[] terms = filter.getSearchTerm().toLowerCase().split( " " );
        ...
        ...
        ...
    }
}

Это файл .groovy (сверху), я попытался запустить его без удачи.

Здесь находится класс Java, в котором я хочу запустить вышеупомянутый Groovy и выполнить getMatterQuery(), чтобы увидеть выходные данные из java main.

public static void main(String args[]) throws CGException {

    String TEMPLATE_PACKAGE_PREFIX = "<path_to_groovy_file.";

    String templateFileName = TEMPLATE_PACKAGE_PREFIX + "SearchQueryBase";

    SearchFilter test = null;

    Binding binding = new Binding();
    binding.setVariable("filter", test);

    GroovyShell shell = new GroovyShell(binding);

    shell.evaluate(templateFileName);

    System.out.println("Finish");
}

РЕДАКТИРОВАТЬ # 1

Это ошибка, которую я получаю при запуске;

Exception in thread "main" groovy.lang.MissingPropertyException: No such property: Common for class: Script1
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231)
    at Script1.run(Script1.groovy:1)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:580)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:618)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:589)

1 Ответ

0 голосов
/ 03 июля 2018

1.

GroovyShell.evaluate(java.lang.String scriptText) принимает строку как отличный текст (содержимое), и вместо этого вы пытаетесь вызвать ее с именем файла. используйте shell.evaluate( new File(templateFileName) )

2

вы можете продолжать использовать shell.evaluate( new File(...) ), но сохраняйте в своем файле groovy только содержимое метода getMatterQuery():

String[] terms = filter.getSearchTerm().toLowerCase().split( " " );
...
...
...

так что у вас будет отличный скрипт, и ваш код должен работать

3

если вы хотите сохранить groovy как класс и вызвать метод getMatterQuery() из этого класса с параметром, тогда ваш java-код должен выглядеть следующим образом:

import groovy.lang.*;
...

public static void main(String[]s)throws Exception{
    GroovyClassLoader cl=new GroovyClassLoader();
    //path to base folder where groovy classes located
    cl.addClasspath(path_to_groovy_root); 
    //the groovy file with SearchQueryBase.groovy
    //must be located in "com/test/dev/search" subfolder under path_to_groovy_root
    Class c = cl.loadClass("com.test.dev.search.SearchQueryBase");
    SearchQuery o = (SearchQuery) c.newInstance();
    System.out.println( o.getMatterQuery(test) );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...