1

关于构建 flink-avro 的问题。

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

但是当我移动到文件夹时

flink/flink-staging/flink-avro

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

为什么它会下载本地构建的相同内容?

4

1 回答 1

2

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

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

Maven 总是首先在本地 m2-repository 中查找依赖的 jar。如果它在那里没有找到 jar,它会开始从 Internet 下载它们。如果它在您的本地存储库中找到“旧”罐子,它可能仍会使用它们(取决于您指定的 maven 更新间隔)。另一方面,即使您mvn install在本地构建,并且在线提供了较新的版本,maven 也可能会下载较新的版本。

最后但并非最不重要的一点是,有时 maven 无法正确解析时间戳依赖关系,或者即使您执行了mvn install. 清除本地 maven 存储库(只需rm对相应的 jars 或整个 repo 执行一次)可以解决此问题。

于 2015-09-02T20:15:15.377 回答