我有一个带有快照依赖项的项目。为了简化起见,假设有一个项目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 存储库中的代码捆绑在一起。