IntelliJ 使用带有时间戳的快照而不是 -SNAPSHOT 来构建工件



我有一个带有快照依赖项的项目。为了简化起见,假设有一个项目A依赖于库B-0.1-SNAPSHOT。

A depends on B

B 作为快照驻留在 Nexus 存储库中。我可以看到它是用时间戳存储的,所以 Nexus 中的实际名称是这样的:B-0.1-20141126.171716-67.jar

执行后:

mvn clean install -U

在项目 A 上,依赖项 B 从 Nexus 下载到我的本地存储库。在那里,我可以找到两罐图书馆B:

B-0.1-SNAPSHOT.jar
B-0.1-20141126.171716-67.jar

目前为止,一切都好。

在 maven 构建完成后,我可以看到 B-0.1-SNAPSHOT.jar 被用来构建工件(.war 文件)

我还将项目 A 作为 maven 项目导入到 IntelliJ。我在Tomcat上运行它。项目由IntelliJ构建,B-0.1-20141126.171716-67.jar被添加到.war文件中。

最后,我在 WEB-INF/lib 目录中与 B-0.1-SNAPSHOT.jar 和 B-0.1-20141126.171716-67.jar 进行了 .war。

对我来说,这似乎是 IntelliJ 中的一个错误,因为 B-0.1-快照.jar 应该从本地 maven 存储库中获取......不是时代版本。有没有办法迫使IntelliJ采取适当的行动?

Maven版本是3.2.3,IntelliJ 14.0.1(但13上的行为相同)。

我今天遇到了同样的问题,我找到了如何禁用此功能。

F4模块上,转到artifacts然后选择工件webapp:exploded的名称并检查框架底部的show contents无线电。

转到WEB-INF/lib并搜索您的依赖项B-0.1-SNAPSHOT.jar并展开该行,您将在其中看到一个compile output文件夹,只需将其删除,然后重新打包并运行,您现在将只有B-0.1-SNAPSHOT.jar,带有时间戳的那个应该消失了。

这样做的缺点是,在 IntelliJ 中运行A模块之前,您必须确保mvn install B模块,因为 IntelliJ 不会打包您的依赖项并将其与您刚刚编辑但未安装在本地 maven 存储库中的代码捆绑在一起。

最新更新