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

Asa*_*ika 9 maven maven-deploy-plugin

我希望能够在没有主工件(JAR,WAR等)的情况下仅部署POM工件(文件),运行时mvn deploy版本是SNAPSHOT版本.

为什么?

我们有几个开发人员在开发多个Maven项目.我们有一个Hudson服务器,每个Maven项目和版本都有一个作业(例如foo-1.2,foo-1.3).每个作业都构建项目并将其部署到Nexus服务器(成功时).正在开发的Maven项目通过在版本中使用-SNAPSHOT后缀来标记.例如: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正在mvn installfoo-webapp上运行.Maven正在检查Nexus,并发现Nexus中有更新版本的foo-core.它下载它(填充了开发人员B的更改)而不是编译失败,因为开发人员A所做的更改不在位于本地存储库中的jar中.下载将覆盖开发人员A安装在那里的文件.

现有解决方案

我查看了maven-deploy-plugin,但是这个插件部署了附加到项目的所有工件.如果他们有办法配置要部署的工件,那就太好了.

问题:有没有办法解决这个问题而不依靠编写我自己的部署插件,基于maven-deploy-plugin?

Kar*_*ati 14

基本上是-Dfile参数,而不是工件,传递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/
Run Code Online (Sandbox Code Playgroud)

这样做的先决条件是将存储库添加到settings.xml中

  • 如果使用`-DpomFile =`,则不需要使用groupId和artifactId;这些将从pom推断出来。 (3认同)

FrV*_*aBe 2

我从未听说过这种可能性,如果有可能的话,我也会感到非常惊讶。由于 pom 和生成的工件是某种单元,因此(对我来说)只部署其中的一部分是没有意义的。

不过,您应该考虑创建一个单独的 pom 项目,其中指定您可能想要在 JAR/WAR 项目上使用的依赖项和插件,如下所示:

<groupId>foo.bar</groupId>
<artifactId>my-pom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
Run Code Online (Sandbox Code Playgroud)

然后通过 JAR/WAR 项目继承该 pom 项目,如下所示:

<parent>
    <groupId>foo.bar</groupId>
    <artifactId>my-pom</artifactId>
    <version>1.0.0</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

这称为项目继承。您可以独立于“子”工件来更改和部署您的 pom 项目。

阅读动机后编辑:

据我了解,您希望阻止 Maven 解析存储库中的 SNAPSHOT 工件(以便本地版本不会被覆盖)。您是否尝试过使用 mvn -nsu 选项(请参阅 参考资料mvn -help)?

-nsu,--no-snapshot-updates             Suppress SNAPSHOT updates
Run Code Online (Sandbox Code Playgroud)

我从未尝试过,但发现了这个报告的问题。尽管如此,我还是会尝试一下(因为该问题尚未发表评论)。