如何在IntelliJ JShell控制台中导入自定义类

18

我正在使用新的Intellij JShell控制台(在这里介绍https://blog.jetbrains.com/idea/2017/09/java-9-and-intellij-idea/)。

我创建了一个简单的类文件Test2.java。

public class Test2 {

    public static String test(){
        return "Hello";
    }
}

JShell控制台可以在提示中找到该方法enter image description here

当我尝试在IntelliJ JShell控制台(工具>Jshell控制台)上运行时

Test2.test();

我遇到了以下错误

"C:\Program Files\Java\jdk-9.0.1\bin\java" --add-modules java.xml.bind -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-frontend.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-protocol.jar" com.intellij.execution.jshell.frontend.Main

ERROR: cannot find symbol
  symbol:   variable Test2
  location: class 
Rejected Test2.test()

有没有什么我需要配置的东西让JShell识别我的自定义类?
我已经将它设置为使用我的项目的类路径。

这是代码。
enter image description here

Jshell控制台和下面的错误。 enter image description here

编辑:

我还尝试将代码移动到包中,并按照用户@NullPointer的建议在Jshell中导入它。

相同的错误仍然存在,并且还给出了“ERROR:package angelapps.java不存在”的错误。

enter image description here


你可以更好地打包你的类,将其放在 src/main/java/<packageName>/Test2 中,然后尝试使用 MyFirstApp 的类路径运行 import <packageName>.Test2;Test2.test(); - Naman
@nullpointer,我也尝试为类设置包名,但没有成功(请参见编辑中的截图)。 - Angel Koh
1个回答

19

假设您有以下项目结构:

enter image description here

以下是代码:

enter image description here

确保在项目设置中设置库:文件 -> 项目结构 -> 库

确保在此处使用输出位置(类文件生成的位置)!这可能会因构建系统而异(target/classes或out/production等)

enter image description here

它应该给你想要的结果:

enter image description here


2
也就是我之前所说的意思。 :) - Naman
2
.oOo. 酷!.oOo. - Oo.oO
1
对我来说不起作用,我仍然收到“错误:包org.thinkbigthings.jshell不存在 拒绝导入org.thinkbigthings.jshell.* ”我按照描述将项目添加到自己的库中,并尝试重新启动jshell和IDE。 - Jason
2
哦,我将项目(本身,基础文件夹)添加为库,而不是项目输出文件夹,并且路径看起来非常相似。在您的回答中,当您说“确保在项目设置中设置库”时,您能否明确指出它是包含项目输出类基础的输出文件夹?在图像中很难看到确切的路径并找出我的项目对应的路径(我使用gradle,我的输出路径不同)。 - Jason
4
虽然这样做可以起作用,但也存在一些缺点。只要 JShell 控制台保持打开状态,项目中的 Java 源代码就不会被编译。为了让 JShell 知道代码的更改,您需要 1)关闭 JShell 控制台,2)强制编译已更改的代码,可以编译单个文件或整个项目,3)重新打开 JShell 控制台。似乎将输出目录作为库添加到项目中以便在 JShell 控制台中使用类的解决方案存在限制,甚至可能无法正常工作,请参见 IDEA-176579 - SubOptimal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接