6

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

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

程序运行程序

程序运行程序

我希望重用这组文件。它们可能来自诸如 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”作为工件。

问题

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

4

2 回答 2

3

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

在这之后你的 pom 看起来不会很漂亮。

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

于 2012-08-01T06:06:04.757 回答
1

正如您所发现的那样,专门使用outputFileNameMapping并不适用于 JAR 的内容。你可以看到这个问题的血淋淋的细节:MASSEMBLY-312

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

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

于 2013-08-18T19:55:35.050 回答