将补丁应用为maven中构建步骤的一部分

时间:2013-08-18 00:48:18

标签: maven patch

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

执行以下操作
patch -R -p1 <Myfolder/Tests/mypatch.patch

来自指定的工作目录。现在我想将此作为我在maven中构建的一部分。我试过了(基于如何在这里用xml指定“&lt;”:What characters do I need to escape in XML documents?):

    <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

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我认为你不能从exec插件中进行流重定向,但你可以通过patch -i选项来指定输入文件,而不是从{{patch读取stdin 1}}。

来自patch联页>

  

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