gpt4 book ai didi

java - Maven 会下载一个新的 SNAPSHOT jar 来替换刚刚在同一构建中创建的 jar 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:02:00 24 4
gpt4 key购买 nike

假设我们的构建是关于从 A 到 Z 构建模块。这些项目的 pom 文件中的所有 version 元素都设置为 -SNAPSHOT。

当我们构建 pom 文件时,maven 从项目 A 开始,然后转到 B,最后到达项目 Z。如果 Z 依赖于 A,maven 是否检查远程仓库是否有最新的 A-SNAPSHOT.jar 和可能替换刚刚在 A/target/和/或本地 Maven 存储库中作为同一构建的一部分创建的 A-SNAPSHOT.jar

我认为 -o 可以避免上述情况,但我只是想了解。

是否可以将 -o 设置为特定的 groupId 以避免在上述情况下可能发生的模糊错误。

是否可以将构建配置为下载本地存储库中不可用的任何 Artifact 但不替换现有 Artifact 。

最佳答案

不, react 堆中的项目总是优先于其他依赖项。

即使在以下情况下也是如此:

  • 使用 -U 运行 Maven设置标志,意味着强制执行更新检查。
  • 设置<updatePolicy>alwayssettings.xml或在 POM 中。
  • 配置install插件到 <installAtEnd>true</installAtEnd>

Maven 会找出哪些 Artifact 是您的 react 器的一部分,并将它们排除在更新检查之外。

这很容易证明。如果您尝试使用上述任一配置运行 Maven,您将看到 Maven 不会下载 Artifact A (例如),因为每次下载都记录在控制台中。

例如,假设您有这个根 POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>root</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>root</name>
<modules>
<module>A</module>
<module>B</module>
...
<module>Z</module>
</modules>
</project>

每个模块看起来像这样:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>root</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<name>...</name>
<artifactId>...</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>

但最后一个看起来像这样:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>root</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Z</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Z</name>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>A</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

那么不,模块 A 将永远不会被存储库中的 Artifact 的另一个版本替换。

关于java - Maven 会下载一个新的 SNAPSHOT jar 来替换刚刚在同一构建中创建的 jar 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com