Maven 无法解析正确的 SNAPSHOT 依赖项
Maven does not resolve correct SNAPSHOT dependencies
我会很快的。我的maven版本是3.5.0。我在我的 Web 应用程序中使用了一些库。这些库单独安装并部署在人工制品实例中。
我有以下 pom(部分):
<project>
....
<properties>
<process.domain.common.version>0.0.1-SNAPSHOT</process.domain.common.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
<version>${process.domain.common.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
</dependency>
</dependencies>
</project>
但是在 libs 中,Maven 放置了这个库:
process.domain.common-0.0.1-20190319.151024-3.jar
而不是这个:
process.domain.common-0.0.1-SNAPSHOT.jar
我的依赖关系是从 artifactory 解决的。为什么 Maven 使用时间戳名称而不是 SNAPSHOT 来放置这个临时库?此行为不会发生在所有已解析的库中。
Maven 将当前日期附加到快照以比较本地存储库的快照版本和远程存储库的快照版本并评估是否需要下载远程处理 jar,因为今天下载 0.0.1-SNAPSHOT 可能会产生不同的结果文件而不是昨天或明天下载它。
如果您在本地构建快照,它只是使用名称 0.0.1-SNAPSHOT
构建。如果您将它部署到 Artifactory,它会获得一个内部时间戳版本号,就像您提到的那样。
当您再次下载时,Artifactory 会为您提供最新的时间戳。
所以在本地,您有时会有 -SNAPSHOT
版本,有时会有时间戳版本。我不清楚 war 中工件的命名规则,但无论你是否有时间戳版本,你都应该没问题。
终于,我找到了解决办法。
解决方法是在你的war项目的pom.xml中添加maven war插件:
<properties>
<version.war.plugin>2.5</version.war.plugin>
</properties>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${version.war.plugin}</version>
<configuration>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
证明:
WEB-INF/lib 没有 war 插件:
WEB-INF/lib with war 插件:
我会很快的。我的maven版本是3.5.0。我在我的 Web 应用程序中使用了一些库。这些库单独安装并部署在人工制品实例中。
我有以下 pom(部分):
<project>
....
<properties>
<process.domain.common.version>0.0.1-SNAPSHOT</process.domain.common.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
<version>${process.domain.common.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intersoft</groupId>
<artifactId>process.domain.common</artifactId>
</dependency>
</dependencies>
</project>
但是在 libs 中,Maven 放置了这个库:
process.domain.common-0.0.1-20190319.151024-3.jar
而不是这个:
process.domain.common-0.0.1-SNAPSHOT.jar
我的依赖关系是从 artifactory 解决的。为什么 Maven 使用时间戳名称而不是 SNAPSHOT 来放置这个临时库?此行为不会发生在所有已解析的库中。
Maven 将当前日期附加到快照以比较本地存储库的快照版本和远程存储库的快照版本并评估是否需要下载远程处理 jar,因为今天下载 0.0.1-SNAPSHOT 可能会产生不同的结果文件而不是昨天或明天下载它。
如果您在本地构建快照,它只是使用名称 0.0.1-SNAPSHOT
构建。如果您将它部署到 Artifactory,它会获得一个内部时间戳版本号,就像您提到的那样。
当您再次下载时,Artifactory 会为您提供最新的时间戳。
所以在本地,您有时会有 -SNAPSHOT
版本,有时会有时间戳版本。我不清楚 war 中工件的命名规则,但无论你是否有时间戳版本,你都应该没问题。
终于,我找到了解决办法。
解决方法是在你的war项目的pom.xml中添加maven war插件:
<properties>
<version.war.plugin>2.5</version.war.plugin>
</properties>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${version.war.plugin}</version>
<configuration>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
证明:
WEB-INF/lib 没有 war 插件:
WEB-INF/lib with war 插件: