如何正确构建具有依赖关系的 .jar 工件?

How to properly build .jar artifact with dependencies?

在花费了无数小时、谷歌搜索类似话题等等之后,我仍然被这个问题所困扰。我有一个简单的 Java 应用程序,它使用 Guava。我正在使用 Intellij IDEA CE 2021。因此,我在 /lib 中复制了 guava.jar,并将其包含在 Project Structure > Modules > Dependencies 中: screenshot

我还创建了 .jar atrifact,并添加了 guava 依赖项: screenshot

在构建工件并从控制台 运行 之后,我在线程“main”中得到 Exception java.lang.NoClassDefFoundError:com/google/common/io/Files,不管我怎么努力。我没有更多的想法,这里有什么建议吗?

一些简单的步骤,您就完成了这项任务:

  1. 将 guava.jar 文件放在项目内的目录中(例如 lib)
  2. 如果您只有一个依赖项,请进入项目资源管理器并右键单击 guava-30...jar 并选择“添加为库”
  3. 如果您知道有更多依赖项,请右键单击“lib”文件夹并选择“添加为库...”
  4. 文件 - 项目结构 - 工件 - 按“+” - JAR - 来自模块...
  5. 选择项目的 Main class,然后“确定”
  6. 生成 jar:构建 - 构建工件 - 构建
  7. 您现在在项目“out”中有一个文件夹 - 带有生成的项目 jar 的工件

请注意(对 Guava 无效):如果您使用的是 签名罐 ,例如 Bouncy Castle,您会注意到这并不像描述的那样工作,因为“包括”项目jar中的外部依赖文件会破坏签名。