Maven Assembly: 重命名解压后的文件

6

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

这两个文件是所有项目都共有的:

procrun.exe

procrunw.exe

我希望能重用这些文件。它们可以来自依赖项,例如JAR或ZIP文件,以后作为构建过程的一部分进行解压缩。这样,如果我以后选择升级二进制文件,我可以创建一个新版本的公共项目并仅更改对公共项目的依赖关系。这样做的另一个原因是我希望在各个项目中使用最少数量的与构建相关的文件。

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

bin/projectA_procrun.exe

bin/projectA_procrunw.exe

部分解决方案

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

这不是理想的,但至少我能够重用此页面中描述的共同汇编文件的内容:

 <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 工件。这样,我可以在与我的每个工件对应的 <assembly> 部分中使用 outputFileNameMapping。

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

问题

有没有什么想法可以实现预期的结果,无论是通过完善我的部分还是采用替代方法?


我建议深入研究maven-dependency-plugin,因为它可以复制工件并解压这些工件。但在这种情况下,通过ant任务调用可能会更短。但也许看一下你的项目结构会有所帮助...也许这就是问题所在,可以简化。 - khmarbaise
而不是重命名文件,能否使用该前缀命名它们所在的目录?例如:bin/projectA/procrun.exe。如果可以,则可以通过Maven Assembly插件实现。 - ecoe
3个回答

3
你可能无法告诉汇编插件进行解压和重命名。 但是,你可以在汇编插件运行后使用antrun插件来重命名文件。
这样做会使你的pom看起来不太美观。
但再说一遍,你已经在处理自定义汇编,所以我猜你可能愿意接受这一点 :-)

1
使用 outputFileNameMapping 并不适用于 JAR 的内容,正如您所发现的那样。您可以查看此问题的详细信息:MASSEMBLY-312
另一个相对较旧的问题:MASSEMBLY-45 提出了一项增强功能,允许类似 Ant 的文件名映射,这可能会给我们带来所需的功能。它已经部分实现,但由于单元测试问题而没有完成。
最终,我采取了 khmarbaise 的建议,使用依赖插件解压我需要的文件,然后使用 assembly 重新打包它们。

0

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