1

我有一些需要修补的依赖项。目前我从终端执行以下操作(运行 ubuntu)

patch -R -p1 <Myfolder/Tests/mypatch.patch

从指定的工作目录。现在我想将其作为我在 Maven 中构建的一部分。我已经尝试过(基于如何在此处的 xml 中指定“<”:我需要在 XML 文档中转义哪些字符?):

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>apply-patch</id>
                <phase>initialize</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>patch</executable>
                    <workingDirectory>../../wdir</workingDirectory>
                    <arguments>
                        <argument>R</argument>
                        <argument>p1</argument>
                        <argument>&lt;Myfolder/Tests/mypatch.patch</argument>
                    </arguments>
                </configuration>
            </execution>                    
        </executions>
    </plugin>

但这失败了:

[INFO] --- exec-maven-plugin:1.2.1:exec (apply-patch) @ my-project ---
patch: '<Myfolder/Tests/mypatch.patch': extra operand
patch: Try `patch --help' for more information.

有任何想法吗?

编辑:我现在尝试使用选项 -i 代替:

<execution>
    <id>apply-patch</id>
    <phase>initialize</phase>
    <goals>
        <goal>exec</goal>
    </goals>
    <configuration>
        <executable>patch</executable>
        <workingDirectory>target/tmp</workingDirectory>                         
        <arguments>
            <argument>R</argument>
            <argument>p1</argument>
                <argument>i</argument>                              
                <argument>mypatch.patch</argument>
        </arguments>
    </configuration>
</execution>

但它给出了错误:

[INFO] --- exec-maven-plugin:1.2.1:exec (apply-patch) @ my-project ---
patch: i: extra operand
patch: Try `patch --help' for more information.

这里似乎是可能的:

http://security-automation-content-repository.googlecode.com/svn-history/r242/branches/new-shredder/eXist-db/pom.xml

所以我想这只是我缺少的一个小细节,有什么想法吗?

4

2 回答 2

1

我知道这是一个老问题,但有一个专门用于应用补丁的插件:http ://maven.apache.org/plugins/maven-patch-plugin/

我在我当前的项目中使用它来修补我使用 JAXB/XJC 生成的一些类(也可作为 maven 插件使用),它似乎运行良好:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-patch-plugin</artifactId>
            <version>1.1.1</version>
            <configuration>
                <patchFile>${basedir}/src/main/patches/my/package/jaxb-generated-classes.patch</patchFile>
                <targetDirectory>${basedir}</targetDirectory>
            </configuration>
            <executions>
                <execution>
                    <id>patch</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>apply</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
于 2015-01-29T11:23:11.410 回答
0

我不认为您可以从 exec 插件进行流重定向,但您可以传递patch选项-i来指定输入文件,而不是patchstdin.

patch手册页

-i patchfile 或 --input=patchfile
从 patchfile 中读取补丁。如果 patchfile 为 -,则从标准输入读取,默认值。

于 2013-08-18T01:13:37.277 回答