使用"mvn deploy:file"命令将快照和正式版本部署至不同的仓库

24

有没有办法告诉maven deploy:file目标,根据项目版本是快照还是发布版,将其部署到两个独立的存储库中?

我希望可能会有一个属性,指示版本是否有-SNAPSHOT前缀,或者默认的要部署到的存储库(已根据版本号计算出来)。

我考虑使用两个不同的配置文件,并通过解析pom.xml文件来确定是否为快照,但如果可能的话,我更喜欢一种更简洁的解决方案。

目前,我的部署插件如下所示,但这只会将它部署到发布存储库,而不管版本如何;

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-deploy-plugin</artifactId>
   <version>2.5</version>
   <executions>
      <execution>
        <id>deploy-zip-created-by-ant-to-artifactory</id>
    <phase>deploy</phase>
    <goals>
       <goal>deploy-file</goal>
    </goals>
    <configuration>
       <repositoryId>${project.distributionManagement.repository.id}</repositoryId>
       <url>${project.distributionManagement.repository.url}</url>
       <file>${project.basedir}/Build/deploy/MyArtifact.zip</file>
       <pomFile>${project.basedir}/MyArtifact-pom.xml</pomFile>
    </configuration>
      </execution>
   </executions>
</plugin>
感谢您的咨询

非常感谢


你为什么喜欢使用deploy:file进行部署?难道你不用mvn release:prepare和release:perform吗? - khmarbaise
我还不完全理解Maven,但我们正在尝试将一个复杂的Ant构建迁移到使用Maven来管理依赖项并发布Ant生成的构件。 Maven目标deploy:file似乎是指定要部署的文件最简单的方法。 - extorn
Maven 中发布的想法是将构件部署到发布存储库(由 distributionManagement 区域定义),并可能附带补充构件(如 javadoc、源代码等)。在发布过程中,版本号如 1.2.3-SNAPSHOT 将被更改为 1.2.3,并且 pom 等将自动更新,下一个开发步骤将增加到 (1.2.4-SNAPSHOT),而 1.2.3 构件将被编译、测试等,并部署到发布存储库。 - khmarbaise
没错。但我们在这里试图实现的是将Ant生成的构件部署到Maven仓库中。我们维护两个独立的仓库,一个用于快照版本,另一个用于发布版本。我们的想法是根据作为系统属性传递给Maven的外部环境属性,将Ant生成的构件部署到相应的仓库中。 - extorn
3
我不明白的是,为什么在使用 ID 时,还需要指定代码库的 URL。因为通过使用 ID,可以从 settings.xml 配置文件中查找到相应的 URL。 - extorn
4个回答

12
如果您在settings.xml中定义了存储库,那么您可以使用

mvn deploy:deploy-file -DrepositoryId=releases -DartifactId=... -Durl=

感谢您的回复。就这样吧。 :-) - extorn

5
这里,我使用GMaven插件选择了POM文件中的distributionManagement部分中的存储库,并将其存储在属性中。
然后,deploy插件可以使用该属性。

0

-3

这大概就是 Maven 的方式:

  <distributionManagement>
    <repository>
      <id>release</id>
      <url>http://my-releases</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <url>http://my-snapshots</url>
    </snapshotRepository>
  </distributionManagement>

当部署快照版本时,它将进入快照存储库。对于非快照版本的发布,将使用常规存储库。

只需运行部署,它就会工作。:-)


9
很遗憾,“deploy:deploy-file”不会考虑“distributionManagement”中的设置,而是需要您指定要部署到的URL。 - Urs Reupke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接