【问题标题】:Maven does not resolve correct SNAPSHOT dependenciesMaven 无法解析正确的 SNAPSHOT 依赖项
【发布时间】:2019-08-23 03:09:58
【问题描述】:

我会很快的。我的 Maven 版本是 3.5.0。我在我的网络应用程序中使用了一些库。这些库单独安装并部署在工件实例中。

我有以下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>

但在库中,Maven 放置了这个库:

  process.domain.common-0.0.1-20190319.151024-3.jar

而不是这个:

  process.domain.common-0.0.1-SNAPSHOT.jar

我的依赖项是从工件解决的。为什么 Maven 将这个临时库与时间戳名称而不是 SNAPSHOT 放在一起?此行为不会在所有已解析的库中发生。

【问题讨论】:

  • 您是否有可能将版本“0.0.1-20190319.151024-3”以某种方式硬编码为临时依赖项。在我看来,这将是 Maven 下载它而不是指定的唯一原因。在构建之前您是否彻底清理了本地环境(删除所有以前下载的库)?

标签: java maven dependencies artifactory


【解决方案1】:

终于找到了解决办法。

解决方案是在你的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>

证明:

没有war插件的WEB-INF/lib:

WEB-INF/lib with 战争插件:

【讨论】:

  • 2.5 版有什么不同吗?还是您只是添加了 sn-p 来解决您的问题?
  • 刚刚添加了插件
【解决方案2】:

如果您在本地构建快照,它只是使用名称0.0.1-SNAPSHOT 构建。如果您将它部署到 Artifactory,它会获得一个内部时间戳版本号,就像您提到的那样。

当您再次下载时,Artifactory 会为您提供最新的时间戳。

因此,在本地,您有时拥有-SNAPSHOT 版本,有时拥有时间戳版本。战争中的神器如何命名的确切规则我不清楚,但无论你是否有时间戳版本,你都应该没问题。

【讨论】:

    【解决方案3】:

    Maven 将当前日期附加到快照中,以比较本地存储库中的快照版本和远程存储库中的快照版本,并评估是否需要下载远程 jar,因为今天下载 0.0.1-SNAPSHOT 可能会给出不同的文件昨天或明天下载。

    【讨论】:

    • 你有支持这个的官方链接吗?我曾与 Maven 合作过,但从未注意到这一点。此外,按照您的逻辑以及附加的时间戳一直到秒这一事实,如果我每分钟进行一次构建,那么每分钟都应该下载一个新版本,无论它是否改变都无关紧要。这似乎不对....
    • 明白。但问题是,为什么 maven 将这个非官方版本的文件放入战争中,而不是普通版本。
    • @Theodore 看起来您正在运行 mvn 并锁定了快照尝试运行 mvn 版本:解锁快照以使用快照而不是时间戳版本
    猜你喜欢
    • 2014-05-03
    • 2017-05-06
    • 1970-01-01
    • 2019-03-23
    • 2017-03-03
    • 2011-08-01
    • 1970-01-01
    • 2013-01-24
    • 2015-07-12
    相关资源
    最近更新 更多