java - 无法将 IntelliJ IDEA 程序编译为可运行的 JAR

标签 java scala intellij-idea classnotfoundexception executable-jar

我正在开展一个学校项目,其中我正在使用 MacOS 上的 IntelliJ IDEA 编写一个 Scala 类作为 Java 项目的一部分。文件夹结构如下:

TopLevelFolderName
  .idea
  .settings
  bin
  classes
    artifacts
    TopLevelFolderName.jar
  src
    dir1
      JavaClass.java
      Main.java
    dir2
      ScalaClass.scala
    META-INF
    .classpath
    .project
    TopLevelFolderName.iml

我可以使用 ScalaClass 中的 Scala 代码构建并运行程序,以运行 Main 类中的 main 函数。

但是,当我设置项目结构以在 classes/artifacts 文件夹中构建 JAR 时,当我转到菜单并单击 Run TopLevelFolderName 时,JAR 文件不起作用.jar。我收到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/Tuple2

有谁知道如何设置我的项目,以便包含 Scala 标准依赖项并可供 JAR 文件访问?这是我第一次使用 IntelliJ IDEA。

谢谢您,如果我可以提供更多信息,请告诉我。

最佳答案

问题是您的 JAR 具有依赖项,包括 Scala 运行时,需要在运行时使用 -classpath 参数将其传递给 java

如果您在 IntelliJ 中单击“play”来运行您的项目,那么您将在输出开始处看到 IntelliJ 使用的 java 命令(如果需要,单击“...”将其展开)。您会注意到该命令包含一个 -classpath 参数,其中包含一长串所需的 JAR。如果需要,您可以将此命令复制并粘贴到 shell 中以运行 JAR。

我认为您可能正在寻找的是如何创建一个包含所有依赖项的单个 JAR,如下所述:How to build jars from IntelliJ properly?

(您还可以通过从 IntelliJ 而不是从 JAR 运行项目来避免此问题,具体取决于您想要实现的目标。)

关于java - 无法将 IntelliJ IDEA 程序编译为可运行的 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49079266/

相关文章:

java - 带有时区的午夜日期发送到时区无知系统

scala - 如何比较泛型枚举值?

json - 解码json字符串里面的json

eclipse - 调试Gradle 1.12依赖关系解决问题

java - 在项目 libgdx 中创建没有 RoboVM 的 ipa

java - 如何使用 Joda Time 计算事件发生次数?

java - Eclipse 4 - 将部分添加到 SashForm

java - 如何为 IntelliJ IDEA 正确安装 Google Java Format 插件?

java - 使用 Java ProcessBuilder 运行 Jar 会产生空输出

scala - 如何将 List(String,String) 转换为 List Map[String,String]?