在打包的 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 中包含本地依赖项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
通过 maven-assembly-plugin 打包在 jar 中包含 spring xml
使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试