【问题标题】:How to import external libraries in jshell java 9?如何在 jshell java 9 中导入外部库?
【发布时间】:2017-03-30 07:17:09
【问题描述】:

我试图了解 jshell 并尝试导入外部库。截至目前,我看不到任何建议/解决方案。

如果已经解决了,请告诉我。

【问题讨论】:

标签: java-9 jshell


【解决方案1】:

我用9 Build 162 Linux 64-bit做了准备:

  • 下载guava-19.0.jarcommons-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.StringUtilsimport com.google.common.base.Optional;

【讨论】:

  • 在 Windows 7 下它的工作方式相同 - 设置指向 jar 文件的 CLASSPATH 环境变量,然后使用 'import' 导入类/包。
  • @Prags 我正在尝试在带有 Jshell 的 Windows 10 环境中使用 option2 和 3 它不起作用我们需要做其他事情才能使其在 Windows10 中工作。
  • @Beast 你能检查一下吗,对你有帮助吗java67.com/2012/08/…
  • @Beast JShell 在 Windows 上需要双反斜杠路径 \\ 或正斜杠路径 / 以分号分隔 ; - 例如,/env --class-path c:/path/to/jars/file.jar;c:\\another\\path\\to\\jars\\file.jar
【解决方案2】:
  • 您可以通过this (modified) version of JShellma​​ven 工件 加载到JShell 中。
  • 还支持/cls命令清除JShell Console。请参阅下面的 Maven 示例。

试一试并分享您的反馈。

【讨论】:

  • "/resolve" 在 JShell 的 Java 9 发行版中不可用
  • 是的 /resolve 和 /cls 在 Java 9 中不存在。我们在 JShell 版本中添加了它们。
【解决方案3】:

在 maven 中更简单的方法,请参阅 In JShell, how to import classpath from a Maven project:在您的项目目录中,运行:

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

如果你有一个 maven pom.xml,你可以使用https://github.com/bitterfox/jshell-maven-plugin。这使用所有依赖项作为类路径。该插件目前不在 maven 中,因此您需要克隆 repo:git clone https://github.com/bitterfox/jshell-maven-plugin.gitThen,

  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开头

【讨论】:

    【解决方案4】:

    启动Jshell从一个目录导入所有jar

    设目录为~/app/java/jars/

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

    【讨论】:

      【解决方案5】:

      如果您使用的是 Fish shell,您可以在您的 fish 配置文件中设置别名。这是你如何做到的。在您的鱼配置( ~/.config/fish/config.fish )中,添加

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

      这将加载类路径中的所有 jar。

      注意:相应地更改 jshell 路径和 jars 存储库路径。

      【讨论】:

      • 它有一些脚本错误,但这会起作用 - jshell --class-path $(find ~/.m2/repository/ -name "*.jar" | tr '\n' ':') 确保你没有太多的罐子,否则你会得到 bash: /usr/bin/jshell: Argument list too long
      【解决方案6】:

      如果你使用像 (find -name "*.jar" | tr '\n' ':') 这样的脚本来连接,那么你的别名将是我不喜欢的巨大字符串。

      如果要包含所有 jar 的目录,诀窍是先使用冒号 (:),然后使用以下目录名称 -

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

      否则将无法正常工作。我希望他们应该让它更干净。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多