在打包的 JAR 中包含本地依赖项 [重复]

Posted

技术标签:

【中文标题】在打包的 JAR 中包含本地依赖项 [重复]【英文标题】:Include local dependencies in packaged JAR [duplicate] 【发布时间】:2017-01-13 03:30:32 【问题描述】:

我有一个 maven 项目,其中包含一些第三方依赖项,稍后会自动提供给我的应用程序,因此可能不会包含在我的 JAR 中。

此外,我还有一些其他依赖项,它们是我自己的库,并且仅在存储库之外的本地可用。所以我创建了一个本地仓库:

<!-- local repo -->
<repository>
    <id>local-maven-repo</id>
    <url>file:///$project.basedir/lib</url>
</repository>

然后我像往常一样添加了依赖项:

<dependency>
    <groupId>de.cydhra</groupId>
    <artifactId>ABCommands</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

当我正确地记得 maven 规范时,现在应该将依赖项包含到我的 JAR 中,因为范围是“编译”(我也尝试过运行时:相同的结果)。但是在运行“mvn package”时完全忽略了依赖。

再次:我不想知道如何将依赖项包含到我的项目中,而是如何将它们编译到完成的应用程序中。

我目前使用 maven-compiler 插件来生成我的 jar。在谷歌搜索时,我听说了 maven jar 插件,它有一个“包含类路径”的选项,它将我的依赖项写入清单中,仅此而已,谢谢。此外,maven 程序集插件可以生成一个 jar-with-dependencies,其中包含我的所有依赖项,以及应该提供的那些依赖项。那我错过了什么?

【问题讨论】:

ABCommands 没有provided 范围,但有compile。你为什么提到provided 依赖项?你想用提供的依赖项制作一个 uber jar 吗? Like here? 不,ABCommands 不是唯一的依赖项。其他一些已经提供了他们的范围。 shade 插件将不包含提供的依赖项。它将仅包括编译和运行时依赖项。并且Assembly Plugin 的jar-with-dependencies 也不会包含provided 依赖项(默认情况下) 是的,但我的问题是,默认情况下编译器插件不包含任何 deps,甚至是编译和运行时的。阴影可以。 【参考方案1】:

使用maven的shade plugin 当你编译你的项目时, jar 将在其中包含您项目的依赖项

【讨论】:

它有效。无需任何进一步的配置。哇。这在我使用 maven 时从未发生过:D 谢谢。 @Cydhra 很高兴听到它,如果您选择此答案作为已接受,如果这确实是您正在寻找的答案,我将不胜感激 是的,当然,当我发表评论时我无法这样做,因为 SO 会阻止它几分钟;)

以上是关于在打包的 JAR 中包含本地依赖项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在gradle项目中包含jar文件[重复]

通过 maven-assembly-plugin 打包在 jar 中包含 spring xml

Maven - 在 jar 中包含依赖库而不解包依赖项?

使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试

如何在 Python 的 setup.py 中包含和安装本地依赖项?

构建包含专有库的maven项目[重复]