Linux 命令(unzip -p) 运行 with exec-maven-plugin
Linux command (unzip -p) run with exec-maven-plugin
我在项目的 target/
文件夹下有 my.zip 文件。
MyProject/
-target/
-my.zip
-pom.xml
在 my.zip 中有一个名为 names.txt 的文件。如果我在项目根目录下运行linux命令:
unzip -p target/my.zip names.txt > target/names.txt
我成功将 names.txt 提取到 target/
文件夹:
MyProject/
-target/
-my.zip
-names.txt
-pom.xml
我想执行与 pom.xml.
中定义的 exec-maven-plugin 相同的命令
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>get names.txt</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<!-- define the command to execute -->
<executable>unzip</executable>
<arguments>
<commandlineArgs>-p target/my.zip names.txt > target/names.txt</commandlineArgs>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
但是当我 运行 maven clean install
时,它不会生成 names.txt ,终端会显示解压缩帮助文档:
UnZip 5.52 of 28 February 2005, by Info-ZIP. Maintained by C. Spieler. Send
bug reports using http://www.info-zip.org/zip-bug.html; see README for details.
Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage).
-p extract files to pipe, no messages -l list files (short format)
-f freshen existing files, create none -t test compressed archive
为什么?我怎样才能让它与 exec-maven-plugin 一起工作?
>
不是 unzip
的有效选项。 >
或 stdout 重定向是 shell 的一项功能,您可以使用它来执行命令。这意味着 shell 将看到 >
,剥离它和下一个参数,为 unzip
创建一个新进程,重定向新进程的标准输出并启动它。
exec-maven-plugin
不使用 shell;相反,它使用相同的 API,shell 在内部使用它来创建新进程。这意味着 unzip
将启动,从命令行找到奇怪的选项并退出并出现错误。
要解决此问题,运行 executable
/bin/sh
或 /bin/bash
与
<commandlineArgs>-c "unzip -p target/my.zip names.txt > target/names.txt"</commandlineArgs>
请注意,您确实应该 HTML 转义 >
。
为避免所有这些问题,您可以将这些命令放入 shell 脚本并执行,或者使用 Maven AntRun Plugin and the unzip
task.
exec-maven-plugin 有一个选项 outputFile
,它将命令的输出写入适当的文件。
我在项目的 target/
文件夹下有 my.zip 文件。
MyProject/
-target/
-my.zip
-pom.xml
在 my.zip 中有一个名为 names.txt 的文件。如果我在项目根目录下运行linux命令:
unzip -p target/my.zip names.txt > target/names.txt
我成功将 names.txt 提取到 target/
文件夹:
MyProject/
-target/
-my.zip
-names.txt
-pom.xml
我想执行与 pom.xml.
中定义的 exec-maven-plugin 相同的命令<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>get names.txt</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<!-- define the command to execute -->
<executable>unzip</executable>
<arguments>
<commandlineArgs>-p target/my.zip names.txt > target/names.txt</commandlineArgs>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
但是当我 运行 maven clean install
时,它不会生成 names.txt ,终端会显示解压缩帮助文档:
UnZip 5.52 of 28 February 2005, by Info-ZIP. Maintained by C. Spieler. Send
bug reports using http://www.info-zip.org/zip-bug.html; see README for details.
Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage).
-p extract files to pipe, no messages -l list files (short format)
-f freshen existing files, create none -t test compressed archive
为什么?我怎样才能让它与 exec-maven-plugin 一起工作?
>
不是 unzip
的有效选项。 >
或 stdout 重定向是 shell 的一项功能,您可以使用它来执行命令。这意味着 shell 将看到 >
,剥离它和下一个参数,为 unzip
创建一个新进程,重定向新进程的标准输出并启动它。
exec-maven-plugin
不使用 shell;相反,它使用相同的 API,shell 在内部使用它来创建新进程。这意味着 unzip
将启动,从命令行找到奇怪的选项并退出并出现错误。
要解决此问题,运行 executable
/bin/sh
或 /bin/bash
与
<commandlineArgs>-c "unzip -p target/my.zip names.txt > target/names.txt"</commandlineArgs>
请注意,您确实应该 HTML 转义 >
。
为避免所有这些问题,您可以将这些命令放入 shell 脚本并执行,或者使用 Maven AntRun Plugin and the unzip
task.
exec-maven-plugin 有一个选项 outputFile
,它将命令的输出写入适当的文件。