使用可以替换库的maven创建可执行jar

Create executable jar with maven where libraries can be replaced

是否可以使用 maven 创建可执行 jar,从而可以在不创建新的可执行 jar 的情况下用更新版本的库替换特定库?

是的,您应该定义一个 provided dependency 例如:

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-b</artifactId>
  <version>[1.0,)</version>
  <type>bar</type>
  <scope>provided</scope>
</dependency>

并确保在 运行ning 时依赖项在您的应用程序类路径中可用。例如使用 java 命令来 运行 一个可执行的 jar:

java -jar MyExecutableJar.jar -cp /path/to/my/library.jar

然后您可以构建可执行 jar 并 运行 它。不使用这种方法有几个缺点:

  • 当你执行你的 jar 时,你必须确保你的库在类路径中
  • Maven 将无法知道要使用哪个版本的依赖项,从而降低您的构建的可重现性。
  • Maven 要求每个依赖项都有一个版本。在我的示例中,我使用 [1.0,) 告诉 Maven 我需要版本 1.x 或更高版本,您可以根据您的上下文进行调整。
  • 如果您的库的 API 以与您当前的 JAR 不兼容的方式发生变化,您将别无选择,只能重新编译您的 jar

话虽这么说,我不知道你为什么要制作具有这种条件的 JAR,但每次你需要更新版本时重建你的 JAR 比保留它更好,或者更改您的依赖项和项目架构。这样做有悖于最佳实践和 Maven 设计。

如果您提供更多背景信息,我会尝试解释更多。