使用 maven-release-plugin 部署程序集包
Posted
技术标签:
【中文标题】使用 maven-release-plugin 部署程序集包【英文标题】:Deploying assembly package with maven-release-plugin 【发布时间】:2011-01-15 16:56:02 【问题描述】:我们使用 Hudson 和 maven-release-plugin 进行发布构建。现在我有一个项目,其中包含一个assembly,它将所有需要的组件放在一起,然后将它们打包到具有所需目录结构的 .tar.gz 包中。
现在我正在尝试让 release-plugin 在 release:perform 目标期间将此包部署到我们的 Maven 存储库,但只部署标准的东西(源代码、javadoc、POM)。
我已经将组装目标绑定到 maven 包阶段,并且 .tar.gz 在发布期间得到构建,但没有上传到存储库。任何提示我在这里做错了什么?
这是程序集插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/distribution.xml</descriptor>
</descriptors>
<finalName>$pom.artifactId-$pom.version</finalName>
<appendAssemblyId>false</appendAssemblyId>
<tarLongFileMode>warn</tarLongFileMode>
</configuration>
<executions>
<execution>
<id>dist-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
我运行构建版本的命令是
mvn release:prepare release:perform release:clean
【问题讨论】:
如果您向我们展示代码或混淆代码,我们或许可以为您提供帮助 【参考方案1】:部署文件不是发布插件的一部分,而是部署插件的一部分(发布不会自行在任何地方部署东西,但您可以配置部署插件以在发布期间调用)。
通常,部署插件会将所有工件部署到远程存储库,但程序集不是工件; Maven 不能以任何方式在其存储库中使用 .tar.gz 档案,因此首先部署它们是没有意义的。
如果您坚持将无用的文件复制到存储库中,则必须使用deploy:deploy-file
(see the docs) 手动部署文件并配置插件执行以在发布步骤中调用它。但我仍然建议不要这样做。
您可能正在寻找一种在某处自动上传程序集的方法。我不知道有什么插件可以做到这一点。
【讨论】:
谢谢,这就是我现在的方式,虽然我现在还没有让它工作。但根据我发现的所有信息,如果想要将 .tar.gz 文件上传到存储库,这似乎是(唯一的?)方法。 再次坚持将无用的文件复制到 repo - maven 不是使用存储库的唯一工具。 *.tar.gz 文件被许多其他打包工具使用,例如apt、puppet 等 @Adam 但这些工具有自己的存储库,通常不能使用 Maven 存储库。所以上传到 Puppet 存储库而不是 Maven 存储库是有意义的。 -1 "如果您坚持将无用的文件复制到存储库中"。判断我的安装程序文件“无用”是非建设性的恕我直言。我想发布该文件并将其存储在与我的多模块 projetc 的其他工件相同的存储库中。这样以后我就只有一个地方可以找了。我同意这可能不是最艰难的地方。【参考方案2】:同时,我找到了两种做我想做的事的方法。
maven-build-helper-plugin 允许将其他条目添加到应部署的工件列表中:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>attach-distribution</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>target/$pom.artifactId-$pom.version.tar.gz</file>
<type>tar.gz</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
另一个非常简单,maven-user 邮件列表中的某个人指出了这一点。简单地使用组装:单一目标而不是组装:组装。这样,在部署阶段生成的工件就会上传到存储库。
<execution>
<id>dist-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal> <!-- that's all :) -->
</goals>
</execution>
【讨论】:
可惜插件不允许你重新定义工件ID @Bastian 您能否详细说明您已解释“组装:单一”目标的第二部分。我需要在哪里添加以上是关于使用 maven-release-plugin 部署程序集包的主要内容,如果未能解决你的问题,请参考以下文章
使用 maven-release-plugin 部署程序集包
maven-release-plugin,是不是可以不使用分支标签标记 pom.xml