【问题标题】:WIll my packaged jar using Maven have my modified jar dependencies?我使用 Maven 打包的 jar 会有我修改后的 jar 依赖项吗?
【发布时间】:2019-10-27 07:30:35
【问题描述】:

我正在使用 Pcap4j 库、Netbeans 和 Maven 在 java 中创建数据包嗅探器。我需要修改一些函数以及它们输出的内容,因为我正在创建一个 GUI 应用程序,而当前的函数输出让生活变得非常困难。所以当我最终使用 Maven 打包它时,生成的 jar 是否会包含我修改后的 Pcap4j 依赖项?我需要在另一台 PC 上执行该 jar 以进行最终演示。还是我对 Maven 包装的概念完全错误?如果有,请赐教。干杯!

【问题讨论】:

  • 我无法真正遵循您的工作流程。以下是正确的吗?您检查了第三方库的代码,对其进行了修改,使用 Maven 构建并在您自己的项目中将其用作依赖项?
  • @JFMeier 是的,没错。

标签: java maven netbeans packet-sniffers


【解决方案1】:

如果您修改第三方项目并使用 Maven 构建它,您应该给它一个版本号来表明这一点(例如 1.2.3-patched-SNAPSHOT1.2.3-modified-SNAPSHOT)。然后你可以用这个版本号来引用它,并确保你得到你想要的。

【讨论】:

  • 在新机器上运行它会发生什么?我的意思是,运行我最终生成的 jar 文件。它会自动下载所有依赖项,然后运行我编辑的依赖项版本吗?如果没有,我该如何确保?
  • 如果你只是构建一个jar文件,所有的依赖都丢失了,它不会运行。您需要捆绑或引用依赖项才能使其工作。一种方法是使用 maven 程序集插件或 maven shade 插件构建一个 fat jar。
  • 是的,对不起,我的意思是阴影插件。我使用它并打包了我的整个项目。那怎么样?
  • 使用 maven shade 插件,依赖项被打包到 jar 中,它们不是从某个地方下载的。因此,您所构建的就是您所运行的。
  • 好吧,所以如果我在没有下载任何这些依赖项的新机器上运行它们,我是否必须确保它们是预先下载的,或者只是执行我的 jar 文件那个给我的?
【解决方案2】:

依赖项通常是新 jar 的一部分。但这实际上取决于依赖项的范围。提供了默认范围,这将使其成为 jar 的一部分:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
    <scope>compile</scope>
</dependency>

但是,还有其他作用域不会将依赖项打包到 jar 中。这里展示了两个最常用的:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

有关范围的更多信息,请访问baeldung

但还有一件事需要考虑,那就是 jar 中的版本是否会被使用。如果依赖项在项目的类路径上不可用,那不是问题,因为您的依赖项是唯一的。如果类路径上存在其他版本的依赖项,则取决于应用程序服务器将选择哪个版本。

编辑:正如 JF Meier 所回应的,您应该更改 groupId、artifactId 和/或您更改的依赖项的版本。那是为了确保使用你的依赖而不是另一个。

【讨论】:

  • 这可能不是答案,这家伙正在寻找。
  • @Sambit 你愿意告诉我我可能错过了什么吗?我同意我应该建议更改依赖项,但我想知道我是否遗漏了其他任何内容。
猜你喜欢
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多