我有一些需要修补的依赖项。目前我从终端(运行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><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.
这似乎有可能:
所以我猜它只是一个我缺少的小细节,有什么想法吗?
答案 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是 - ,则从标准输入读取默认值。