Maven程序集:重命名未打包的文件



我的多个Maven项目使用Maven汇编插件需要将两个二进制文件复制到一个文件夹中。

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

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

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

问题

关于我如何通过加强我的部分或采用另一种方法来实现预期结果,有什么想法吗?

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

在这之后,你的pom看起来就不好看了。

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

使用outputFileNameMapping并不适用于您发现的JAR内容。你可以看到这个问题的血腥细节:MASSEMBLY-31。

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

我最终接受了khmarbaise的建议,用依赖插件打开了我需要的文件,然后用汇编重新打包。

我知道这是一个老问题,所以答案可能已经过时了。

我能够通过使用maven-dependency-pluginunpack目标以及fileMappers来重命名未打包文件的目的地来实现这个技巧。

这个带有示例的官方文档对我帮助很大:https://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-filemapper.html

最新更新