Maven - 处理快照依赖项

问题描述 投票:0回答:4

我在我的Web应用程序POM中有以下maven依赖项,而后者又应该引入其他依赖项:

<dependency>
    <groupId>com.my.libraries</groupId>
    <artifactId>my-libs</artifactId>
    <type>pom</type>
    <version>1.6-SNAPSHOT</version>
</dependency>

注意我在之前在旧版本中拉出的my-libs工件有1.5版本。但我后来将版本升级为1.6-SNAPSHOT。在mathlibrary释放中没有出现1.5神器。

我期待一些罐子作为my-libs神器1.6-SNAPSHOT的一部分出现在1.5中不存在 - pOM在下面:

<!-- all the usual POM descriptionsm for my-libs -->

<groupId>com.my.libraries</groupId>
<artifactId>my-libs</artifactId>
<version>1.6-SNAPSHOT</version>
<packaging>pom</packaging>

<!-- continues... all normal stuff, nothing to see here :'/ -->
        <dependency>
            <groupId>com.my</groupId>
            <artifactId>mathlibrary</artifactId>
            <version>1.0</version>
        </dependency>  
<!-- continues -->

如果我为我的项目做mathlibrary,我预计会拉动mvn package jar。但当我查看我的webapplication的lib文件夹时,罐子不在那里。然后我检查了我的.m2目录内容,似乎只有版本1.5存在,所以1.6-snapshot没有自动安装。从这里开始,我想如果之前推出了发布版本,它不会拉下一个SNAPSHOT?

在我使用my-libs手动安装mvn clean install工件后 - 在我的Web应用程序的下一个版本中,它正确地拉出了罐子。这是否意味着我的package阶段定义为不自动拉出SNAPSHOT依赖项?或者这是预期的事情(即如果它不是发布版本,我必须手动运行install阶段)?

java maven
4个回答
1
投票

使用mvn package从本地存储库中提取所有SNAPSHOT依赖项(如果工件是远程存储库,还会每24小时从远程存储库更新本地存储库)。

我真的不明白“手动安装的my-libs”是什么意思,因为没有自动安装工件的方法(除了CI服务器,在checkin上安装/部署)。如果你想使用工件(比如my-libs),你需要构建它并将它放在本地存储库中 - 你可以使用mvn install来实现。


0
投票

您的问题的答案取决于您在packaging中使用的pom.xml以及哪些插件具有针对packge阶段定制的执行。处理依赖关系时,Maven通常会解析它们,这意味着相应的jar文件将位于本地存储库中。在你的target文件夹中获取jar文件(原样或解压缩)是一些插件工作的结果(这样的插件会在prepare-packagepackage阶段(通常)执行一个mojo。所以,请确保使用正确的packaging(例如war)或者例如“assembly”插件(可以为你重新打包依赖项)。为了使你的依赖关系可用于解决和进一步使用,你应该将它们deploy到远程存储库,或者install它们到本地存储库。


0
投票

在阅读@JFMeier的答案之后,我做了以下事情:

1)从.m2目录中删除了所有版本/快照。

2)更改了我的Web应用程序POM以使用1.5发布my-libs

3)开始构建。

4)一旦构建完成,我确认mylibraries jar尚未部署在tomcat的WEB-INF \ lib中的最终Web应用程序目录中

5)重复步骤2-4 - 但是将版本改为1.6-SNAPSHOTmy-libs

6)现在我可以看到预期的结果。


-2
投票

当你进行mvn安装时,Maven只进入存储库(全局或本地)。使用Maven Install,Maven会检查项目中是否存在所有POM库,如果缺少某些POM库,则会从存储库下载到项目中。如果您执行Maven包,它只会打包项目中的库。

© www.soinside.com 2019 - 2024. All rights reserved.