| 
 | 
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Понадобилось мне в java проект встроить использование расширений, которые будут писаться сторонними разработчиками и подкладываться в виде исходников. умные люди посоветовали использовать груви. Эти же самые умные люди сказали, что есть возможность в своём проекте написать класс с полезными функциями и при подключение груви класса устанавливать свой класс в качестве базового, чтобы в груви коде были доступны всякие полезности. После этого умный человек ушёл в отпуск и уехал отдыхать. А я что то туплю и никак не нагуглю, как это сделать правильно. Подскажите пожалуйста - действительно ли есть такая возможность и если есть - как это сделать? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 15:46 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  А в какой момент времени эти "сторонние люди" будут подкладывать расширения? В компилляции? В рантайме? Или перед запуском бинарника? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 17:08 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  SpringMan, Смотрел. Параметры пробрасываются без проблем. Забираются тоже. Методы из груви тоже запускаются. Базовый класс установить не получается Я полагал, должно быть что то вроде CompilerConfiguration conf = new CompilerConfiguration(); conf.setScriptBaseClass(BaseClass.class.getName()); GroovyShell shell = new GroovyShell(getClass().getClassLoader(), new Binding(), conf); где BaseClass - класс из проекта. Мне хотелось бы, чтобы после этого подгруженные классы наследовали методы моего BaseClass. Что то то ли я что то упускаю, то ли это в принципе делается не так ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 17:14 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  mayton А в какой момент времени эти "сторонние люди" будут подкладывать расширения? В компилляции? В рантайме? Или перед запуском бинарника? В рантайме. Иначе зачем городить огород с подгрузкой исходников? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 17:15 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Покажи код, не совсем понимаю в чем проблема. К примеру с таким baseClass-ом: Код: java 1. 2. 3. 4. 5. внутри скрипта можно вызывать getValue() ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 17:27 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Можно просто использовать классы из класслоадера. Не обязательно вообще использовать baseClass - можно импортануть нужное внутри руками ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 17:33 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  SpringMan Покажи код, не совсем понимаю в чем проблема. К примеру с таким baseClass-ом: Код: java 1. 2. 3. 4. 5. внутри скрипта можно вызывать getValue() Базовый класс public abstract class BaseClass extends Script { public String getValue() { return "im parent"; } } Подгружаемый класс class Test extends Script{ def params; Object run() { return getValue() } } код CompilerConfiguration conf = new CompilerConfiguration(); conf.setScriptBaseClass(BaseClass.class.getName()); GroovyShell shell = new GroovyShell(getClass().getClassLoader(), new Binding(), conf); Script script = null; try { script = shell.parse(new File("test.groovy")); } catch (IOException e) { e.printStackTrace(); } script.run(); вывод groovy.lang.MissingMethodException: No signature of method: Test.getValue() is applicable for argument types: () values: [] Possible solutions: getClass(), evaluate(java.io.File), evaluate(java.lang.String), getAt(java.lang.String), getParams() ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 18:06 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  SpringMan Можно просто использовать классы из класслоадера. Не обязательно вообще использовать baseClass - можно импортануть нужное внутри руками имеется ввиду внутри подгружаемого скрипта? динамически подгружать классы ? не хотелось бы. предполагается, что то будет некое ядро, которое разные команды будут расширять под свои нужды - сказать, что вы вот можете подкладывать сюда скрипты, которым будет доступен такой то функционал - гораздо лучше, чем сказать, что вы можете класлоадером грузить классы и у вас наступит щастье ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 18:12 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  xerxf, почему Test extends Script ? если ты объявляешь класс - то все следует правилам джавы и setScriptBaseClass не используется если ты работаешь со скриптом (нет объявления класса) то будет использоваться setScriptBaseClass т.е. с твоим бейз классом подгружаемый скрипт типа Код: java 1. должен работать ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 18:21 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Dmitry. xerxf, почему Test extends Script ? если ты объявляешь класс - то все следует правилам джавы и setScriptBaseClass не используется если ты работаешь со скриптом (нет объявления класса) то будет использоваться setScriptBaseClass т.е. с твоим бейз классом подгружаемый скрипт типа Код: java 1. должен работать в смысле Test extend BaseClass ? это понятно, что должно работать. мне просто говорили, что там можно не указывать базовый класс, а при загрузке просто подкинуть в качестве базового свой. пробовал и с extends Script и без extends Script.. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 18:27 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  код работает: Код: java 1. 2. 3. 4. 5. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 18:59 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Dmitry. код работает: Код: java 1. 2. 3. 4. 5. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. да, это работает. А если мне нужно не выполнять написанную в коде строку, а подгрузить груви класс из рядом лежащего текстового файла и выполнить его метод? А перед этим установить ему базовый класс BaseClass. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 20:23 | 
  
  
  
   | 
||
| 
 
Встраивание groovy 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  все то-же самое если в файле скрипт типа Код: java 1. то setScriptBaseClass(BaseClass.class.getName()); будет работать а если в файле класс, то ты должен его унаследовать от нужного тебе супер-класса и setScriptBaseClass в этом случае работать не будет: Код: java 1. 2. 3. 4. 5. 6. 7. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.07.2021, 20:57 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=59&msg=40083423&tid=2120398]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    11ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    66ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    53ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 14ms | 
| total: | 175ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...