diff --git a/pom.xml b/pom.xml index 9724280..1e6f990 100644 --- a/pom.xml +++ b/pom.xml @@ -125,12 +125,18 @@ - copy-dependencies + copy generate-test-resources - org.slf4j true + + + com.github.tomakehurst + wiremock-jre8-standalone + 2.35.2 + + diff --git a/src/main/java/org/apache/maven/shared/scriptinterpreter/BeanShellScriptInterpreter.java b/src/main/java/org/apache/maven/shared/scriptinterpreter/BeanShellScriptInterpreter.java index 5f613f9..a2c6426 100644 --- a/src/main/java/org/apache/maven/shared/scriptinterpreter/BeanShellScriptInterpreter.java +++ b/src/main/java/org/apache/maven/shared/scriptinterpreter/BeanShellScriptInterpreter.java @@ -139,8 +139,9 @@ public Object evaluateScript(String script, Map globalVariables, Prin } } } - + ClassLoader curentClassLoader = Thread.currentThread().getContextClassLoader(); try { + Thread.currentThread().setContextClassLoader(classLoader); return engine.eval(script); } catch (TargetError e) { throw new ScriptEvaluationException(e.getTarget()); @@ -148,6 +149,8 @@ public Object evaluateScript(String script, Map globalVariables, Prin throw e; } catch (Throwable e) { throw new ScriptEvaluationException(e); + } finally { + Thread.currentThread().setContextClassLoader(curentClassLoader); } } finally { System.setErr(origErr); diff --git a/src/main/java/org/apache/maven/shared/scriptinterpreter/GroovyScriptInterpreter.java b/src/main/java/org/apache/maven/shared/scriptinterpreter/GroovyScriptInterpreter.java index 2308064..3617572 100644 --- a/src/main/java/org/apache/maven/shared/scriptinterpreter/GroovyScriptInterpreter.java +++ b/src/main/java/org/apache/maven/shared/scriptinterpreter/GroovyScriptInterpreter.java @@ -68,6 +68,7 @@ public Object evaluateScript(String script, Map globalVariables, Prin PrintStream origOut = System.out; PrintStream origErr = System.err; + ClassLoader curentClassLoader = Thread.currentThread().getContextClassLoader(); try { if (scriptOutput != null) { @@ -80,10 +81,12 @@ public Object evaluateScript(String script, Map globalVariables, Prin new Binding(globalVariables), new CompilerConfiguration(CompilerConfiguration.DEFAULT)); + Thread.currentThread().setContextClassLoader(childFirstLoader); return interpreter.evaluate(script); } catch (Throwable e) { throw new ScriptEvaluationException(e); } finally { + Thread.currentThread().setContextClassLoader(curentClassLoader); System.setErr(origErr); System.setOut(origOut); } diff --git a/src/test/java/org/apache/maven/shared/scriptinterpreter/ScriptRunnerTest.java b/src/test/java/org/apache/maven/shared/scriptinterpreter/ScriptRunnerTest.java index f1396ce..fd94f4f 100644 --- a/src/test/java/org/apache/maven/shared/scriptinterpreter/ScriptRunnerTest.java +++ b/src/test/java/org/apache/maven/shared/scriptinterpreter/ScriptRunnerTest.java @@ -20,7 +20,7 @@ import java.io.File; import java.nio.file.Files; -import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -251,18 +251,17 @@ void theSameClassloaderShouldBeUsed(String scriptType) throws Exception { try (FileLogger logger = new FileLogger(logFile); ScriptRunner scriptRunner = new ScriptRunner()) { - scriptRunner.setClassPath( - Arrays.asList("target/dependency/slf4j-api.jar", "target/dependency/slf4j-simple.jar")); + scriptRunner.setClassPath(Collections.singletonList("target/dependency/wiremock-jre8-standalone.jar")); scriptRunner.run("test classpath 1", basedir, "class-path1", context, logger); - assertNotNull(context.get("logger")); + assertNotNull(context.get("wireMockServer")); scriptRunner.run("test classpath 2", basedir, "class-path2", context, logger); } String logContent = new String(Files.readAllBytes(logFile.toPath())); - assertTrue(logContent.contains("INFO test - Test log 1")); - assertTrue(logContent.contains("INFO test - Test log 2")); + assertTrue(logContent.contains("wireMockServer started with port=")); + assertTrue(logContent.contains("wireMockServer stopped")); } private Map buildContext() { diff --git a/src/test/resources/bsh-test/class-path1.bsh b/src/test/resources/bsh-test/class-path1.bsh index 1f94e6c..56b1f72 100644 --- a/src/test/resources/bsh-test/class-path1.bsh +++ b/src/test/resources/bsh-test/class-path1.bsh @@ -17,11 +17,15 @@ * under the License. */ -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; -Logger logger = LoggerFactory.getLogger("test"); -context.put("logger", logger); -logger.info("Test log 1"); + +WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().dynamicPort().dynamicHttpsPort()); +wireMockServer.start(); + +System.out.println("wireMockServer started with port=" + wireMockServer.port()); + +context.put("wireMockServer", wireMockServer); return true; diff --git a/src/test/resources/bsh-test/class-path2.bsh b/src/test/resources/bsh-test/class-path2.bsh index 48ffa1f..d8369d2 100644 --- a/src/test/resources/bsh-test/class-path2.bsh +++ b/src/test/resources/bsh-test/class-path2.bsh @@ -17,9 +17,11 @@ * under the License. */ -import org.slf4j.Logger; +import com.github.tomakehurst.wiremock.WireMockServer; -Logger logger = context.get("logger"); -logger.info("Test log 2"); +WireMockServer wireMockServer = context.get("wireMockServer"); +wireMockServer.stop(); + +System.out.println("wireMockServer stopped"); return true; diff --git a/src/test/resources/groovy-test/class-path1.groovy b/src/test/resources/groovy-test/class-path1.groovy index fee04b9..7c374d0 100644 --- a/src/test/resources/groovy-test/class-path1.groovy +++ b/src/test/resources/groovy-test/class-path1.groovy @@ -17,11 +17,14 @@ * under the License. */ -import org.slf4j.Logger -import org.slf4j.LoggerFactory +import com.github.tomakehurst.wiremock.WireMockServer +import com.github.tomakehurst.wiremock.core.WireMockConfiguration -Logger logger = LoggerFactory.getLogger("test") -context.put("logger", logger) -logger.info("Test log 1") +WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().dynamicPort().dynamicHttpsPort()) +wireMockServer.start() + +println("wireMockServer started with port=" + wireMockServer.port()) + +context.put("wireMockServer", wireMockServer) return true diff --git a/src/test/resources/groovy-test/class-path2.groovy b/src/test/resources/groovy-test/class-path2.groovy index a919848..5246fd3 100644 --- a/src/test/resources/groovy-test/class-path2.groovy +++ b/src/test/resources/groovy-test/class-path2.groovy @@ -17,9 +17,11 @@ * under the License. */ -import org.slf4j.Logger +import com.github.tomakehurst.wiremock.WireMockServer; -Logger logger = context.get("logger") -logger.info("Test log 2") +WireMockServer wireMockServer = context.get("wireMockServer") +wireMockServer.stop() + +println("wireMockServer stopped") return true