【发布时间】:2016-07-07 05:20:28
【问题描述】:
我有一个简单的问题,但作为 Maven 的新手,不清楚哪种方法是解决此问题的最佳实践。
我正在工作的一个项目有一个管理档案的依赖项,如下所示:net.sf.sevenzipjbindings。
这种依赖由两个工件构成:一个是纯 Java,它提供 Java 接口,另一个是本机底层代码,根据操作系统有多种风格。
目前,我正在将 maven 构建的 jar 与所有平台的所有本地人打包,但我希望能够执行以下操作:
- 在项目上工作时(如果我理解正确,那么
compile目标)使用全平台工件(这样我就可以从多个操作系统无缝工作 - 打包时构建 3 个不同的 JAR,其依赖项由 Java 接口 + 特定平台工件组成
从我的角度来看,这听起来很简单,但我很难理解我应该做什么以及一般的最佳做法是什么。由于这里没有不同的或模块化的功能(比如将部分代码隔离到一个单独的模块中),只是替换了底层动态库。
【问题讨论】:
-
要准确理解你的目标有点困难,但如果你的项目是一个库,通常的做法是打包你自己的jar,只依赖Java接口并需要下游包含适当的本机驱动程序,否则将它们全部包含在您的应用程序 jar 中。
-
如果你需要不同的依赖,这意味着你必须有不同的模块来处理它。
-
@chrylis:我的项目不是库,是应用程序。基本上,假设依赖项是 A B C D 和 E,我需要使用 AB 编译并导出 3 个带有 AC、AD 和 AE 的 JAR。但是这些依赖是直接取自 Maven 仓库的,它们不是我自己的包。
-
那么如果你想让它在任何地方运行,你应该将所有依赖打包到你的应用程序中。
-
@chrylis:当然,但这不是重点。我想为不同的平台分发不同的 JAR,因为原生库占用了应用程序最终大小的 95%,所以我想拆分它们。
标签: java maven maven-package