在 IntelliJ IDEA 中将外部库添加到工件 jar

Posted

技术标签:

【中文标题】在 IntelliJ IDEA 中将外部库添加到工件 jar【英文标题】:Adding external library to artifact jar in IntelliJ IDEA 【发布时间】:2017-07-01 00:06:03 【问题描述】:

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

我从项目结构创建了一个新的 Jar 工件,然后将外部 JAR 添加到库中,然后在模块列表中检查它,最后将其添加到工件的输出中。这些都不起作用。当我构建并尝试运行我的应用程序时,它会引发错误:

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

我错过了什么,或者我这样做完全错误?

【问题讨论】:

【参考方案1】:

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

    像下面mvn install:install-file -Dfile=myJar.jar -DgroupId=com.yourproject -DartifactId=yourproject -Dversion=version -Dpackaging=jar 那样安装您的库。 使用here 解释的系统路径。

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

【讨论】:

我其实不知道有没有使用Maven。我还没有创建任何构建文件。不确定 IDEA 是如何做到的,但我的假设是不需要构建文件。只有一个 MANIFEST.MF 文件。【参考方案2】:

你有两个选择:

将依赖项提取到工件 jar 中,使应用程序成为具有所有依赖项的单个可执行 jar 通过Manifest.MF链接依赖的jar并将它们复制到应用程序主jar附近

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

工件被生成到out\singleout\linked 目录中。

相关配置:

【讨论】:

你刚刚帮我解决了一个问题,我花了 25 多个小时,也许 2 周,试图破译。非常感谢!此外,这一切都有效,但它背后的主干是什么? IntelliJ 是否使用 Maven 或 Ant 或类似的东西? 您可以使用基于Maven的项目,是的,但这与您的情况无关。当您向项目添加新依赖项时,它们不会自动添加到您已有的工件中,您需要再次查看工件配置并添加从 jar 运行应用程序所需的所有缺失库。另一个常见的错误是将一个 jar 包含在另一个不起作用的 jar 中,该 jar 必须在主 jar 中解压或复制到它附近并通过清单链接(不要忘记在清单中添加任何新 jar案例)。 在基于 Maven 的项目中,可以使用 Maven 插件来创建具有依赖关系的 jar,您将通过运行 Maven 目标而不是使用 IntelliJ IDEA 工件配置来生成最终工件。这样,您添加到pom.xml 的所有新依赖项将自动出现在 Maven 生成的 jar 中。几乎同样适用于基于 Gradle 的项目。 资源(如图像)在哪里适合? 资源通常进入resources 目录(配置为资源根目录的目录)。在示例项目中,它与您看到log4j.properties 文件的目录相同。如果需要,您可以添加更多资源根目录,这些目录中的文件将出现在编译器输出中,因此您无需调整工件配置。

以上是关于在 IntelliJ IDEA 中将外部库添加到工件 jar的主要内容,如果未能解决你的问题,请参考以下文章

如何在intellij idea 2016.3.1中将jar包添加到external ligraries中

Intellij IDEA在maven项目中添加外部Jar包运行

将外部 jars (lib/*.jar) 添加到 IntelliJ IDEA 项目的正确方法

Maven项目已建立,但是在IntelliJ IDEA中似乎没有依赖项

如何在 IntelliJ IDEA 中添加“库项目”?

Intellij IDEA怎么手动给module添加内置依赖库