Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to import external libraries in jshell java 9?

Tags:

java-9

jshell

I was trying to understand jshell and fumbled to import external library. As of date I couldn't see any suggestion/solution for this.

Can someone please let me know if already figured this out.

like image 802
Akshay Avatar asked Mar 30 '17 07:03

Akshay


People also ask

How do I import an external library?

Copy the jar file to the libs folder. Here, you can see our added jar file under the libs folder. Right-click on the jar file and select Add As Library. The library is successfully added to our project.

Does JShell import anything on its own?

Note: the Java language defines that the java. lang package in automatically imported so this does not need to be explicitly imported. To set the startup script use /set start : jshell> /set start mystartup.

Is JShell is introduced in java 9?

JShell is a Java read-eval-print loop which was first introduced in the JDK 9. It is tracked by JEP 222 jshell: The Java Shell (Read-Eval-Print Loop).


5 Answers

I tried with 9 Build 162 Linux 64-bit with preparation:

  • Downloaded guava-19.0.jar and commons-lang3-3.4.jar to /opt/libs

The following options are available:

  1. Specify CLASSPATH environment variable:

    $> CLASSPATH="/opt/libs/commons-lang3-3.4.jar:/opt/libs/guava-19.0.jar" bin/jshell

  2. Specify classpath with jshell option:

    $> bin/jshell --class-path /opt/libs/guava-19.0.jar:/opt/libs/commons-lang3-3.4.jar

  3. Configure evaluation context within jshell session with command /env, /reset or /reload(these commands are different, you can check out with its help info), take /env as example:

    jshell> /env -class-path /opt/libs/commons-lang3-3.4.jar:/opt/libs/guava-19.0.jar

And then you're able to either import org.apache.commons.lang3.StringUtils or import com.google.common.base.Optional;.

like image 83
shizhz Avatar answered Oct 17 '22 03:10

shizhz


  • You can load maven artifacts into JShell through this (modified) version of JShell.
  • It also supports /cls command to clear JShell Console. See Maven Example below.

enter image description here

Give a try and share your feedback.

like image 44
B. S. Rawat Avatar answered Oct 17 '22 03:10

B. S. Rawat


Easier way in maven, see In JShell, how to import classpath from a Maven project: In your project directory, run:

mvn com.github.johnpoth:jshell-maven-plugin:1.0:run

If you have a maven pom.xml, you can use https://github.com/bitterfox/jshell-maven-plugin. This uses all dependencies as the classpath. The plugin is not currently in maven, so you need to clone the repo: git clone https://github.com/bitterfox/jshell-maven-plugin.git. Then,

  1. mvn clean install
  2. add the following to your pom.xml:

    <build>
    <plugins>
        <plugin>
            <groupId>net.java.openjdk.shinyafox</groupId>
            <artifactId>jshell-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
        </plugin>
    </plugins>
    </build>
    
  3. start with mvn jshell:compile

like image 12
serv-inc Avatar answered Oct 17 '22 05:10

serv-inc


Start Jshell importing all jars from a directory

Let directory is ~/app/java/jars/

jshell --class-path $(ls -d ~/app/java/jars/* | tr '\n' ':')
like image 8
smamran Avatar answered Oct 17 '22 03:10

smamran


If you are using Fish shell, you can set the alias in your fish config file. Here's how you can do it. In your fish config ( ~/.config/fish/config.fish ), add

alias jshell "~/.jenv/versions/12.0.1/bin/jshell --class-path (find ~/.m2/repository/ -name \"*.jar\" | tr '\n' ':')"

This will load all the jars in your class path.

Note: Change the jshell path and jars repository path accordingly.

like image 1
Dinesh Chander Avatar answered Oct 17 '22 04:10

Dinesh Chander