问题
I'm try to use Nailgun on Debian GNU/Linux 9 (stretch).
"Nailgun is a client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead. Programs run in the server (which is implemented in Java), and are triggered by the client (written in C), which handles all I/O."
Some documentation found:
- Nailgun Quick Start
- JVM Startup Times/Nailgun
- How to improve performance of java using nailgun server
- DSpace/Nailgun
I use Oracle Java version 10.0.2 (I also tried with GraalVM 1.0.0-rc9 Java 1.8.0_192).
A simple Java program to test: TestVarargs.java. (At the end I want to run a JAR file, but I had tried with this simple example because that doesn't work.)
$ wget https://bitbucket.org/OPiMedia/hellanguages/raw/default/Java/standard/TestVarargs/TestVarargs.java
$ javac TestVarargs.java
$ java TestVarargs
This program runs correctly.
First try, with the Debian nailgun package (version 0.9.1-3)
Installation:
$ sudo apt-get remove nailgun
Launch the server:
$ java -jar /usr/share/java/nailgun-server.jar &
NGServer 0.9.1 started on all interfaces, port 2113.
Run the client (/usr/bin/ng-nailgun
):
$ ng-nailgun ng-version
NailGun server version 0.9.1
But the following doesn't work:
$ ng-nailgun ng-cp
java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader
at com.martiansoftware.nailgun.builtins.NGClasspath.nailMain(NGClasspath.java:65)
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:564)
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:280)
$ ng-nailgun TestVarargs
java.lang.ClassNotFoundException: TestVarargs
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:291)
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:242)
$ ng-nailgun ng-alias TV TestVarargs
java.lang.ClassNotFoundException: TestVarargs
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:291)
at com.martiansoftware.nailgun.builtins.NGAlias.nailMain(NGAlias.java:79)
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:564)
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:280)
The stop command runs correctly:
$ ng-nailgun ng-stop
com.martiansoftware.nailgun.builtins.NGAlias: 2/0
com.martiansoftware.nailgun.builtins.NGClasspath: 5/0
com.martiansoftware.nailgun.builtins.NGServerStats: 0/0
com.martiansoftware.nailgun.builtins.NGStop: 1/1
com.martiansoftware.nailgun.builtins.NGVersion: 1/0
NGServer shut down.
Second try, building from GitHub sources
$ wget https://github.com/facebook/nailgun/archive/master.zip
$ unzip master.zip
$ cd nailgun-master
Compile the server with Maven:
$ mvn clean install
...
[INFO] BUILD SUCCESS
...
Compile the client:
$ make
Launch the server:
$ java -jar nailgun-server/target/nailgun-server-1.0.0.jar &
NGServer 1.0.0 started on all addresses, port 2113.
Run the client:
$ nailgun-client/target/ng ng-version
NailGun server version 1.0.0
But the following doesn't work:
$ nailgun-client/target/ng ng-cp
(Neither output nor error message.)
$ cd ..
$ nailgun-master/nailgun-client/target/ng TestVarargs
(Neither output nor error message.)
$ nailgun-master/nailgun-client/target/ng ng-alias TV TestVarargs
(Neither output nor error message.)
The stop command runs correctly:
$ nailgun-master/nailgun-client/target/ng ng-stop
NGServer shut down.
So, in conclusion, I can install and launch the server. But I can't run any Java program.
回答1:
Assume that your HelloWorld.class
exists in the following directory:
/home/28041/ng-sample/com/crazyboy/HelloWorld.class
Before running the class, you need to tell where the class locates by using the following command:
ng ng-cp /home/28041/ng-sample
and then
ng com.crazyboy.HelloWorld
来源:https://stackoverflow.com/questions/53363931/how-run-a-simple-java-program-with-the-client-server-nailgun-on-debian-stretch