Maven程序集:重命名解压缩文件

时间:2012-08-01 00:09:33

标签: maven maven-3

使用maven-assembly-plugin的多个Maven项目需要将两个二进制文件复制到一个文件夹中。

这些是我所有项目共有的两个原始文件:

  

procrun.exe

     

procrunw.exe

我希望这组文件可以重复使用。它们可能来自诸如JAR或ZIP文件之类的依赖项,以便稍后将其作为构建过程的一部分进行解压缩。这样,如果我后来选择升级二进制文件,我可以创建一个新版本的公共项目,只需将依赖项更改为我的公共项目。这样做的另一个原因是因为我想使用最小化单个项目中与构建相关的文件的数量。

现在,棘手的部分是我需要在解压缩依赖项时重命名每个文件。例如,对于项目A,我需要按如下方式复制文件:

  

仓/ projectA_procrun.exe

     

仓/ projectA_procrunw.exe

部分解决方案

我的部分解决方案是将这两个文件放在每个Maven项目的src / main / build / bin文件夹中。

这不理想,但至少我能够重用常见汇编文件as described in this page的内容:

 <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>my_assembly</id>

    <formats>
        <format>zip</format>
    </formats>    

    <files>
        <file>
        <source>src/main/build/bin/procrun.exe</source>
        <outputDirectory>bin</outputDirectory>
        <destName>${myexecutable.name}.exe</destName>           
    </file>
    <file>
        <source>src/main/build/bin/procrunw.exe</source>
        <outputDirectory>bin</outputDirectory>
        <destName>${myexecutable.name}w.exe</destName>
    </file>
    </files>

    <!-- Additional details ommitted -->    
</assembly> 

尝试失败

Assembly中的 outputFileNameMapping 属性允许重命名工件,但不能重命名程序集中的文件。

一次失败的尝试包括将每个文件注册为单独的Maven工件。这样,我可以在与我的每个工件对应的部分中使用outputFileNameMapping。

我遇到的问题是Nexus不喜欢将'exe'作为工件。

问题

关于如何通过增强部分或采用替代方法来实现预期结果的任何想法?

2 个答案:

答案 0 :(得分:3)

您可能无法告诉程序集插件解压缩和重命名。 但是,您可以使用antrun plugin在程序集插件运行后重命名文件。

此后你的pom看起来不会很漂亮。

但话说回来,你已经在处理自定义程序集,所以我猜你可能愿意接受: - )

答案 1 :(得分:1)

使用 outputFileNameMapping 特别不适用于您发现的JAR内容。您可以看到此问题的详细信息:MASSEMBLY-312

另一个相当古老的问题:MASSEMBLY-45提出了一个增强功能,允许使用Ant样式的文件名映射,这可能会为我们提供所需的功能。它部分实施但由于单元测试问题而从未完成。

我最终接受了khmarbaise的建议,并使用依赖项插件解压缩了我需要的文件,然后用汇编重新打包它们。