首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在maven中应用补丁作为构建步骤的一部分

在maven中应用补丁作为构建步骤的一部分
EN

Stack Overflow用户
提问于 2013-08-18 08:48:18
回答 2查看 2.8K关注 0票数 1

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

代码语言:javascript
运行
复制
patch -R -p1 <Myfolder/Tests/mypatch.patch

从指定的工作目录。现在,我想把它作为我在maven中构建的一部分。我已经尝试过了(基于如何在xml中指定"<“:What characters do I need to escape in XML documents?):

代码语言:javascript
运行
复制
    <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>

但失败的原因是:

代码语言:javascript
运行
复制
[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:

代码语言:javascript
运行
复制
<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>

但它给出了错误:

代码语言:javascript
运行
复制
[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

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

EN

回答 2

Stack Overflow用户

发布于 2015-01-29 19:23:11

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

我正在我的当前项目中使用它来修补我使用JAXB/XJC (也可以作为maven插件)生成的一些类,并且它似乎工作得很好:

代码语言:javascript
运行
复制
        <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
EN

Stack Overflow用户

发布于 2013-08-18 09:13:37

我不认为您可以从exec插件执行流重定向,但是您可以向patch传递-i选项来指定一个输入文件,而不是让patchstdin读取。

来自patch手册页

输入补丁文件或-i =补丁文件

从patchfile中读取补丁。如果patchfile为-,则从标准输入读取,这是默认值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18294701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档