fix: 脚本执行前直接插入 import 语句,根治 PluginContext 找不到

This commit is contained in:
mediabot-pt
2026-07-01 12:05:00 +08:00
parent b24abefd9f
commit e268e51a52

View File

@@ -5,8 +5,6 @@ import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyShell; import groovy.lang.GroovyShell;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.customizers.ImportCustomizer;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -23,18 +21,12 @@ import java.util.*;
public class GroovyScriptEngine { public class GroovyScriptEngine {
private static final ObjectMapper objectMapper = new ObjectMapper(); private static final ObjectMapper objectMapper = new ObjectMapper();
private static final GroovyClassLoader classLoader; private static final GroovyClassLoader classLoader = new GroovyClassLoader(
Thread.currentThread().getContextClassLoader());
static { /** 脚本前缀:自动导入必要包 + PluginContext 桩 */
ImportCustomizer imports = new ImportCustomizer(); private static final String SCRIPT_PREFIX =
imports.addStarImports("groovy.json"); "import groovy.json.*\n" +
imports.addStarImports("com.par.core.adapter"); "import com.par.core.adapter.*\n";
CompilerConfiguration config = new CompilerConfiguration();
config.addCompilationCustomizers(imports);
classLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), config);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Map<String, Object> execute(String groovyScript, String content, String url) { public Map<String, Object> execute(String groovyScript, String content, String url) {
@@ -49,7 +41,7 @@ public class GroovyScriptEngine {
binding.setVariable("utils", new ScriptUtils()); binding.setVariable("utils", new ScriptUtils());
GroovyShell shell = new GroovyShell(classLoader, binding); GroovyShell shell = new GroovyShell(classLoader, binding);
Object scriptResult = shell.evaluate(groovyScript); Object scriptResult = shell.evaluate(SCRIPT_PREFIX + groovyScript);
return buildResult(result, scriptResult); return buildResult(result, scriptResult);
} catch (Exception e) { } catch (Exception e) {