pha*_*ani 5 java maven-3 maven
假设我们的构建是从 A 到 Z 构建模块。所有版本元素都设置为 -SNAPSHOT。
当我们构建 pom 文件时,maven 从项目 A 开始,然后转到 B,最后到达项目 Z。如果 Z 依赖于 A,maven 是否会检查远程存储库中是否有最新的 A-SNAPSHOT.jar 并可能替换A -SNAPSHOT.jar 刚刚作为 A/target/ 和/或本地 Maven 存储库中同一构建的一部分创建?
我认为-o
可以避免上述情况,但我只是想了解。
是否可以设置-o
为特定的 groupId 以避免在上述情况下可能发生的模糊错误。
是否可以配置构建以下载本地存储库中不可用的任何工件,但不替换现有的工件。
不,反应堆中的项目将始终优先于其他依赖项。
即使在以下情况下,这一点仍然成立:
-U
,这意味着强制进行更新检查。<updatePolicy>
。always
settings.xml
install
插件配置为<installAtEnd>true</installAtEnd>
Maven 将找出哪些工件是您的 Reactor 的一部分,并将它们排除在更新检查之外。
这很容易证明。如果您尝试使用上述任一配置运行 Maven,您将看到 Maven 不会下载工件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>
Run Code Online (Sandbox Code Playgroud)
每个模块如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
但最后一个看起来像这样:
<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>
Run Code Online (Sandbox Code Playgroud)
那么不,模块 A 永远不会被存储库中的工件的另一个版本替换。
归档时间: |
|
查看次数: |
631 次 |
最近记录: |