【问题标题】:Packaging multiple JAR with Maven by changing a dependency通过更改依赖项使用 Maven 打包多个 JAR
【发布时间】: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


【解决方案1】:

听起来你想要一个多模块 Maven 构建:

- myapp
  - myapp-engine
  - myapp-windows
  - myapp-linux

myapp-engine 模块应该依赖于external-library-apimyapp-windows 模块应该依赖于myapp-engineexternal-library-windows。由于您实际上只在特定操作系统上运行应用程序以进行任何给定的启动(即使是在开发中),没有理由不启动特定于操作系统的模块。现代 IDE 在多模块构建中调试到单独的模块应该没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2020-05-08
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多