Как импортировать внешние библиотеки в jshell java 9?

Я пытался понять jshell и возился с импортом внешней библиотеки. На сегодняшний день я не видел никаких предложений/решений для этого.

Может кто-нибудь, пожалуйста, дайте мне знать, если уже понял это.


person Akshay    schedule 30.03.2017    source источник
comment
См. stackoverflow.com/a/51572213/3728901.   -  person Do Nhu Vy    schedule 28.07.2018


Ответы (6)


Я пробовал с 9 Build 162 Linux 64-bit с подготовкой:

  • Скачал guava-19.0.jar и commons-lang3-3.4.jar в /opt/libs

Доступны следующие параметры:

  1. Укажите переменную среды CLASSPATH:

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

  2. Укажите путь к классам с опцией jshell:

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

  3. Настройте контекст оценки в сеансе jshell с помощью команды /env, /reset или /reload (это разные команды, вы можете проверить их справочную информацию), возьмите /env в качестве примера:

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

И тогда вы сможете либо import org.apache.commons.lang3.StringUtils, либо import com.google.common.base.Optional;.

person shizhz    schedule 30.03.2017
comment
В Windows 7 это работает так же - установите переменную среды CLASSPATH, которая указывает на файл jar, затем используйте «импорт» для импорта класса/пакета. - person y434y; 06.04.2017
comment
@Prags Я пытаюсь использовать варианты 2 и 3 в среде Windows 10 с Jshell, он не работает, нам нужно сделать что-то еще, чтобы он работал в Windows10. - person Jinesh Parikh; 22.03.2019
comment
@Beast, вы можете проверить это, может это поможет вам java67.com/2012/08/ - person Prags; 25.03.2019
comment
Для @Beast JShell в Windows требуются либо пути с двойной обратной косой чертой \\ , либо пути с прямой косой чертой /, разделенные точкой с запятой ;, например, /env --class-path c:/path/to/jars/file.jar;c:\\another\\path\\to\\jars\\file.jar - person Thomas Taylor; 30.06.2020

введите здесь описание изображения

Попробуйте и поделитесь своим мнением.

person Bhagat S.    schedule 28.04.2017
comment
/resolve недоступен в версии JShell для Java 9. - person Jay; 08.12.2017
comment
yes /resolve и /cls отсутствуют в Java 9. Мы добавили их в нашу версию JShell. - person Bhagat S.; 08.08.2018

Более простой способ в maven, см. В JShell, как импортировать classpath из проекта Maven: в каталоге вашего проекта запустите:

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

Если у вас есть maven pom.xml, вы можете использовать https://github.com/bitterfox/jshell-maven-plugin. Это использует все зависимости в качестве пути к классам. Плагин в настоящее время не находится в maven, поэтому вам нужно клонировать репо: git clone https://github.com/bitterfox/jshell-maven-plugin.git. Затем,

  1. mvn clean install
  2. добавьте следующее к вашему 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. начните с mvn jshell:compile

person serv-inc    schedule 23.02.2018

Запустите Jshell, импортируя все банки из каталога

Пусть каталог ~/app/java/jars/

jshell --class-path $(ls -d ~/app/java/jars/* | tr '\n' ':')
person smamran    schedule 05.11.2018

Если вы используете оболочку Fish, вы можете установить псевдоним в файле конфигурации fish. Вот как вы можете это сделать. В конфигурации вашей рыбы ( ~/.config/fish/config.fish ) добавьте

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

Это загрузит все банки в вашем пути к классу.

Примечание. Измените путь jshell и путь к репозиторию jars соответствующим образом.

person Dinesh Chander    schedule 01.09.2019
comment
у него есть ошибка сценария, но это сработает - jshell --class-path $(find ~/.m2/repository/ -name "*.jar" | tr '\n' ':') убедитесь, что у вас не слишком много банок, иначе вы получите bash: /usr/bin/jshell: Argument list too long - person prayagupd; 08.02.2020

Если вы используете скрипт типа (find -name *.jar | tr '\n' ':') для объединения, то ваш псевдоним будет огромной строкой, которая мне не нравится.

Если вы хотите включить каталог со всеми jar-файлами, хитрость заключается в том, чтобы сначала использовать двоеточие (:), а затем имя каталога, как показано ниже:

alias java-shell="~/jdk-10.0.2.jdk/Contents/Home/bin/jshell --class-path :<dir-name>/jars/* "

В противном случае он не будет работать должным образом. Я бы хотел, чтобы они сделали его чище.

person deo    schedule 07.11.2019