为什么构建 flink-avro 会下载 SNAPSHOT flink jars

why building flink-avro downloads SNAPSHOT flink jars

关于构建 flink-avro 的问题。

我下载了源代码,并且能够构建完整的源代码。

但是当我移动到文件夹时

flink/flink-staging/flink-avro

和 运行 命令 mvn package 因为我想编译和 运行 测试,它开始下载最新的 flink SNAPSHOT jar。 然而,我从源代码构建了相同的罐子,一切都在本地仓库中。

为什么它下载与本地构建的相同的东西?

您需要先在顶级模块上使用 mvn install。这会将构建的 jar 复制到位于 ~/.m2/respository/ 的本地 Maven 存储库中。 mvn package 仅构建 jars 并将它们放入文件夹 target(不会复制到本地 Maven 存储库)。

之后,您可以进入 flink-avro 并在那里构建(使用 mvn packagemvn install -- 只要没有其他模块依赖于构建的 jar,mvn package 没问题)。如果你在模块 A 中改变了一些东西,而另一个模块 B 依赖于 A,你需要在模块 A 中做 mvn install。否则,模块 B 无法访问 A 新建的 jar。

Maven 总是首先在您的本地 m2 存储库中查找相关的 jar。如果它在那里没有找到 jar,它就会开始从 Internet 下载它们。如果它在您的本地存储库中找到 "old" 个 jars,它可能仍会使用它们(取决于您指定的 maven 更新间隔)。另一方面,即使您在本地构建 mvn install,并且网上有更新的版本,maven 也可能会下载更新的版本。

最后但同样重要的是,有时 maven 无法正确解析时间戳依赖项,或者即使您执行 mvn install 也不会更新本地存储库。清除本地 maven 存储库(只需对相应的 jar 或整个存储库执行 rm)即可解决此问题。