关于构建 flink-avro 的问题。
我下载了源代码,我能够构建完整的源代码。
但是当我移动到文件夹时
flink/flink-staging/flink-avro
并运行命令mvn package
,因为我想编译和运行测试,它开始下载最新的 flink SNAPSHOT jars。然而,我从源代码构建了相同的罐子,一切都在本地回购中。
为什么它会下载本地构建的相同内容?
关于构建 flink-avro 的问题。
我下载了源代码,我能够构建完整的源代码。
但是当我移动到文件夹时
flink/flink-staging/flink-avro
并运行命令mvn package
,因为我想编译和运行测试,它开始下载最新的 flink SNAPSHOT jars。然而,我从源代码构建了相同的罐子,一切都在本地回购中。
为什么它会下载本地构建的相同内容?
您需要先mvn install
在顶层模块上使用。这会将构建的 jar 复制到位于~/.m2/respository/
. mvn package
只构建 jars 并将它们放在文件夹中target
(不会复制到本地 maven repo 中)。
之后,您可以进入flink-avro
并在那里构建(使用mvn package
或mvn 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 执行一次)可以解决此问题。