25

我们使用 Hudson 和maven-release-plugin进行发布构建。现在我有一个项目,其中包含一个程序集,该程序集将所有需要的组件放在一起,然后将它们打包到具有所需目录结构的 .tar.gz 包中。

现在我试图在 release:perform 目标期间让 release-plugin 将此包部署到我们的 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
4

2 回答 2

36

同时,我找到了两种做我想做的事的方法。

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>
于 2010-02-11T15:55:09.430 回答
1

部署文件不是发布插件的一部分,而是部署插件的一部分(发布不会自行在任何地方部署东西,但您可以配置部署插件以在发布期间调用)。

通常,部署插件会将所有工件部署到远程存储库,但程序集不是工件;Maven 不能以任何方式在其存储库中使用 .tar.gz 档案,因此首先部署它们是没有意义的。

如果您坚持将无用的文件复制到存储库中,则必须使用deploy:deploy-file请参阅文档)手动部署文件并配置插件执行以在发布步骤中调用它。但我仍然建议不要这样做。

您可能正在寻找一种在某处自动上传程序集的方法。我不知道有一个插件可以做到这一点。

于 2010-02-11T14:36:56.273 回答