如何仅将pom文件部署到Maven中的快照存储库?

问题描述

| 当运行
mvn deploy
并且version是SNAPSHOT版本时,我希望仅部署POM工件(文件)而没有主要工件(JAR,WAR等)。 为什么? 我们有几个开发人员致力于多个Maven项目。我们有一个Hudson服务器,每个Maven项目和版本都有一个工作(例如foo-1.2,foo-1.3)。每个作业都会构建项目并将其部署到Nexus服务器(成功时)。通过使用版本中的-SNAPSHOT后缀将正在开发的Maven项目标记为此类。例如:1.2-SNAPSHOT,1.3-SNAPSHOT。 这是一个示例场景,该架构如何破坏开发人员的工作。 假设有两个Maven项目:foo-core和foo-webapp,两者的版本均为1.2-SNAPSHOT。 开发人员A正在研究foo-core,进行了一些更改并进行了编译。 开发人员A继续工作,但是在foo-webapp上。 开发人员B开始工作并更改foo-core。它提交他的工作并将其推送到SCM。 哈德森由SCM触发;构建foo-core并将其部署到Nexus中的快照存储库。 开发人员A在foo-webapp上运行
mvn install
。 Maven正在检查Nexus,发现Nexus中有较新版本的foo-core。由于开发人员A所做的更改不在本地存储库中的jar中,因此它下载了该文件(充满了开发人员B的更改),并且编译失败。该下载将覆盖开发人员A在此处安装的文件。 现有解决方案 我研究了maven-deploy-plugin,但是此插件部署了附加到项目的所有工件。如果他们有办法配置要部署的工件,那就太好了。 问题:有什么方法可以解决这个问题,而无需依靠maven-deploy-plugin编写自己的deploy插件?     

解决方法

基本上对pass2ѭ参数(而不是工件)传递
pom.xml
,但是仅仅这样做是不够的。您还需要提供项目的参数
-DgroupId
-DartifactId
。运行命令,然后开始!
mvn deploy
现在不会给您任何问题。这是一个示例部署命令:
$ mvn deploy:deploy-file -DpomFile=pom.xml -Dfile=./pom.xml -DgroupId=my.group.id -DartifactId=artifact-id -DrepositoryId=bigdata-upload-snapshots -Durl=http://maven.mymaven.com/content/repositories/snapshots/
前提条件是将存储库添加到settings.xml中     ,我从未听说过这种可能性,如果可能的话,我也会非常惊讶。由于pom和生成的工件是某种单位,因此(对我而言)仅部署它们的一部分就不会引起任何注意。 不过,您应该考虑创建一个单独的pom项目,该项目指定了可能要在JAR / WAR项目中使用的依赖项和插件,如下所示:
<groupId>foo.bar</groupId>
<artifactId>my-pom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
然后通过您的JAR / WAR项目继承该pom项目,如下所示:
<parent>
    <groupId>foo.bar</groupId>
    <artifactId>my-pom</artifactId>
    <version>1.0.0</version>
</parent>
这称为项目继承。您可以独立于\“ child \”构件来更改和部署pom项目。 阅读动机后进行编辑: 据我了解,您想防止Maven从存储库中解析SNAPSHOT工件(以使本地版本不会被覆盖)。您是否曾经尝试使用mvn -nsu选项(请参见
mvn -help
)?
-nsu,--no-snapshot-updates             Suppress SNAPSHOT updates
我从未尝试过,但是发现了此报告的问题。不过,我会尝试一下(因为尚未对此问题发表评论)。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...