Skip to content
This repository has been archived by the owner on May 22, 2024. It is now read-only.

Maven example with standalone jar #18

Open
dschow opened this issue Feb 2, 2019 · 4 comments
Open

Maven example with standalone jar #18

dschow opened this issue Feb 2, 2019 · 4 comments

Comments

@dschow
Copy link

dschow commented Feb 2, 2019

I'm wondering if it's possible to information on how to include the dependencies required to run this sample with a standalone jar.

@boris-spas
Copy link
Member

If what you want to achieve is to have one single jar you can run, that's not really possible if you want to have compilation enabled with graal, since you need to update the module path.

@adveres
Copy link

adveres commented Jan 31, 2020

Very curious about this, too. Why can exec-maven-plugin do what we cannot do with java -jar ?

Taking this project as an example, mvn -X exec:exec shows:

[DEBUG] Executing command line: [/Users/averes/.jabba/jdk/[email protected]/Contents/Home/bin/java, @target/modulepath, 
-classpath, /Users/averes/dev/graal-js-jdk11-maven-demo/target/classes:/Users/averes/.m2/repository/org/graalvm/sdk/graal-sdk/19.3.1/graal-sdk-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/js/js/19.3.1/js-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/regex/regex/19.3.1/regex-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/truffle/truffle-api/19.3.1/truffle-api-19.3.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm/7.1/asm-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-tree/7.1/asm-tree-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-analysis/7.1/asm-analysis-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-commons/7.1/asm-commons-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar:/Users/averes/.m2/repository/com/ibm/icu/icu4j/64.2/icu4j-64.2.jar:/Users/averes/.m2/repository/org/graalvm/js/js-scriptengine/19.3.1/js-scriptengine-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/tools/profiler/19.3.1/profiler-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/tools/chromeinspector/19.3.1/chromeinspector-19.3.1.jar, 
-XX:+UnlockExperimentalVMOptions, 
-XX:+EnableJVMCI, 
--upgrade-module-path=/Users/averes/dev/graal-js-jdk11-maven-demo/target/compiler/compiler.jar, com.mycompany.app.App]

So why can't I do

java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=/Users/averes/dev/graal-js-jdk11-maven-demo/target/compiler/compiler.jar -jar target/my-app-1.0-SNAPSHOT.jar

Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.graalvm.truffle not found, required by jdk.internal.vm.compiler

Or (basically identical to the maven exec):

java @target/modulepath -classpath /Users/averes/dev/graal-js-jdk11-maven-demo/target/classes:/Users/averes/.m2/repository/org/graalvm/sdk/graal-sdk/19.3.1/graal-sdk-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/js/js/19.3.1/js-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/regex/regex/19.3.1/regex-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/truffle/truffle-api/19.3.1/truffle-api-19.3.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm/7.1/asm-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-tree/7.1/asm-tree-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-analysis/7.1/asm-analysis-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-commons/7.1/asm-commons-7.1.jar:/Users/averes/.m2/repository/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar:/Users/averes/.m2/repository/com/ibm/icu/icu4j/64.2/icu4j-64.2.jar:/Users/averes/.m2/repository/org/graalvm/js/js-scriptengine/19.3.1/js-scriptengine-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/tools/profiler/19.3.1/profiler-19.3.1.jar:/Users/averes/.m2/repository/org/graalvm/tools/chromeinspector/19.3.1/chromeinspector-19.3.1.jar -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --upgrade-module-path=/Users/averes/dev/graal-js-jdk11-maven-demo/target/compiler/compiler.jar -jar target/my-app-1.0-SNAPSHOT.jar
no main manifest attribute, in target/my-app-1.0-SNAPSHOT.jar

Is there something simple I am missing? Thank you!

@boris-spas
Copy link
Member

I'm not quite sure what you are asking but I'll take a crack and answering what I think you are asking so please let me know if I'm missing the mark.

The first example you gave cannot work since target/my-app-1.0-SNAPSHOT.jar does not contain any of the dependencies. If you managed to build a correct fat jar (including all the dependencies and ensuring the module path is correctly set up) than you may be able to do this.

The problem with your second example (also with the first one) is that the built jar does not have a proper manifest to be executed with -jar (https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute)

@adveres
Copy link

adveres commented Feb 3, 2020

Thank you for checking in!

Let me add some clarity for my use-case. I'm trying to run a fat Spring Boot JAR in Docker, which can run some JavaScript too. Today java is OpenJDK 11.0.2.

CMD java -jar /opt/foo/mySpringBoot.jar

I did end up getting a new stacktrace when I used Context instead of ScriptEngine, which appears to be this issue: oracle/graal#1348

So perhaps I just need to wait for the next release.

Example + trace

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        try(Context context = Context.newBuilder("js").build()) {
            context.eval("js", "print('Hello from JS!');");
        }

        SpringApplication.run(Application.class, args);
    }
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.nio.file.FileSystemNotFoundException
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:169)
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:155)
	at java.base/java.nio.file.Path.of(Path.java:208)
	at java.base/java.nio.file.Paths.get(Paths.java:97)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache$Loader.getLanguageHomeFromURLConnection(LanguageCache.java:546)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache$Loader$ServicesLoader.loadImpl(LanguageCache.java:827)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache$Loader.load(LanguageCache.java:490)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache.createLanguages(LanguageCache.java:205)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache.loadLanguages(LanguageCache.java:195)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.LanguageCache.languages(LanguageCache.java:185)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotEngineImpl.initializeLanguages(PolyglotEngineImpl.java:647)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotEngineImpl.<init>(PolyglotEngineImpl.java:205)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotEngineImpl.<init>(PolyglotEngineImpl.java:186)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotImpl.buildEngine(PolyglotImpl.java:195)
	at org.graalvm.sdk/org.graalvm.polyglot.Engine$Builder.build(Engine.java:506)
	at org.graalvm.sdk/org.graalvm.polyglot.Context$Builder.build(Context.java:1444)
	at net.myspring.server.Application.main(Application.java:34)
	... 8 more

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants