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

时间:2017-11-29 12:14:02

标签: java maven jar libraries

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

1 个答案:

答案 0 :(得分:1)

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

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

确保运行时应用程序类路径上的依赖项可用。例如,使用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设计的。

如果您提供更多上下文,我会尝试解释更多。