2017-02-13 205 views
4

如何将外部库添加到IntelliJ IDEA中的项目中,以便在构建工件时仍可访问库中的类?将外部库添加到IntelliJ IDEA中的工件jar中

我已经从Project Structure创建了一个新的Jar工件,然后将外部JAR添加到库中,然后在模块列表中将其检查并最终将其添加到工件的输出中。这些都不起作用。当我建立并尝试运行我的应用程序,它抛出一个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: <path of the class trying to use>

我缺少什么,还是我做这完全错了吗?

回答

6

你有2个选择这里:

  • 提取的依赖到神器罐子,这样应用程序是与所有的依赖
  • 链接通过Manifest.MF依赖罐子单可执行的JAR和近复制它们应用程序主罐

我准备了一个演示两种方法的示例项目:HelloWithDependencies.zip

工件被制作成out\singleout\linked目录。

相关配置:

single

linked

+1

你刚刚帮我解决了我花了超过25个小时,也许2个星期,试图破译的问题。非常感谢你! 此外,这项工作和所有,但它背后的主干是什么? IntelliJ是否使用Maven或Ant或类似的东西? –

+1

您可以使用基于Maven的项目,是的,但它与您拥有的情况无关。当您向项目添加新的依赖项时,它们不会自动添加到您已有的项目中,您需要再次查看项目配置并添加从jar中运行应用程序所需的所有缺失库。另一个常见的错误是在另一个罐子里包含一个不可用的罐子,该罐子必须在主罐子内部解包或者在其附近复制并通过清单链接(不要忘记添加任何新的罐子到清单中,案件)。 – CrazyCoder

+1

在基于Maven的项目中,可以使用Maven插件创建具有依赖关系的JAR,并且您将通过运行Maven目标而不是使用IntelliJ IDEA工件配置来生成最终工件。这样,你添加到'pom的所有新的依赖关系。xml'会自动出现在Maven生成的jar中。几乎相同的情况适用于基于Gradle的项目。 – CrazyCoder

1

如果您使用maven构建应用程序,那么这不是添加外部库的正确方法。你应该要么

  1. 做一个像你的库的安装如下mvn install:install-file -Dfile=myJar.jar -DgroupId=com.yourproject -DartifactId=yourproject -Dversion={version} -Dpackaging=jar
  2. 使用系统路径,如解释here

选项1是首选,因为您不必将jar留在项目中。

+0

其实我不知道,如果正在使用Maven的。我还没有创建任何生成文件。不知道IDEA如何做,但我的假设是不需要构建文件。所有这些都是MANIFEST.MF文件。 –