Thanks Remi, although I don’t think that’s it.
To wit, if I write a minimal executable example:
---
import javax.script.*;
public class X {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("nashorn");
engine.eval("print('Hello, World!');");
}
}
---
then run it with from my Nashorn project directory after it downloaded
dependencies and built the JAR (so they’re in the directories named on the
command line):
$ java --module-path build/nashorn/dependencies:build/nashorn/dist X.java
it works, so seemingly service discovery is just fine with only the declaration
in module-info.java.
Further, in my test app on GitHub I even switched to using
NashornScriptEngineFactory directly, so that it doesn’t rely on the service
discovery mechanism, and then it fails with:
java.lang.IllegalArgumentException: Null module name
at
java.base/jdk.internal.module.Checks.requireModuleName(Checks.java:46) ~[na:na]
at
java.base/java.lang.module.ModuleDescriptor$Builder.requires(ModuleDescriptor.java:1646)
~[na:na]
at
java.base/java.lang.module.ModuleDescriptor$Builder.requires(ModuleDescriptor.java:1667)
~[na:na]
at
org.openjdk.nashorn.internal.runtime.StructureLoader.createModule(StructureLoader.java:68)
~[nashorn-core-15.0.jar:na]
...
which is further evidence that Spring Boot is not loading Nashorn as a JPMS
module.
Attila.
> On 2020. Dec 13., at 18:07, Remi Forax <[email protected]> wrote:
>
> Hi Attila,
> for compatibility, you have to both use the new module-info descriptor and
> the old META-INFO/services when you declare a service.
>
> It's a shame that jar doesn't do that by itself, it was something we
> (module/jigsaw EG) discussed but it was never implemented.
>
> regards,
> Rémi
>
> ----- Mail original -----
>> De: "Attila Szegedi" <[email protected]>
>> À: "nashorn-dev" <[email protected]>
>> Envoyé: Dimanche 13 Décembre 2020 17:54:06
>> Objet: Nashorn + Spring Boot; help appreciated
>
>> Hey folks,
>>
>> seems like folks are trying to use standalone Nashorn with Spring Boot, and
>> are
>> running into an issue where Boot doesn’t load Nashorn as a JPMS module. If
>> anyone has expertise with this (Spring Boot loading app dependencies as JPMS
>> modules) and can help it’d be most appreciated.
>>
>> I outlined the problem (and I even have a very small reproducer Boot app) in
>> a
>> comment on Stack Overflow[0], if you want to help, you’ll find the details
>> there.
>>
>> Thank you,
>> Attila.
>>
>> [0]
>> https://stackoverflow.com/questions/65265629/how-to-use-nashorn-in-java-15-or-later/65278158#65278158