Maven exec:exec执行失败但exec:java成功,如何解决?
嘿,我来帮你搞清楚Exec Maven Plugin里exec:exec和exec:java这两个目标的区别,顺便解决你遇到的exec:exec报错问题~
核心差异:exec:java vs exec:exec
这俩目标的定位完全不同:
exec:java:直接在Maven本身的JVM进程里运行指定的Java主类,不需要启动新进程。你只要在插件配置里指定好<mainClass>,或者命令行传-Dexec.mainClass参数就能跑,这也是你用它正常的原因。exec:exec:用来启动外部独立进程执行命令,它不局限于Java程序——可以是shell命令、脚本、其他语言的可执行文件等等。但它必须明确知道要执行的具体命令是什么,你现在的报错就是因为没指定,Maven默认去找名为exec的程序,而系统里根本没有这个命令,所以才抛出No such file or directory的异常。
解决你的exec:exec报错
要让exec:exec正常工作,你需要明确告诉它要执行的命令,有两种方式:
方式1:命令行直接指定
在运行命令时通过参数传递要执行的程序和参数,比如:
# 例子1:执行ls命令查看目录内容 mvn exec:exec -Dexec.executable="ls" -Dexec.args="-l /home/huang/Desktop/Project/Make/allnewmaker" # 例子2:如果要运行Java程序(虽然这种情况用exec:java更方便) mvn exec:exec -Dexec.executable="java" -Dexec.args="-cp target/classes com.yourpackage.YourMainClass"
方式2:在pom.xml里配置插件
把exec:exec的执行命令写在pom的插件配置里,这样每次直接跑mvn exec:exec就行:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <id>run-custom-command</id> <goals> <goal>exec</goal> </goals> <configuration> <!-- 指定要执行的可执行文件/命令 --> <executable>ls</executable> <!-- 命令的参数列表 --> <arguments> <argument>-l</argument> <argument>/home/huang/Desktop/Project/Make/allnewmaker</argument> </arguments> </configuration> </execution> </executions> </plugin> </plugins> </build>
该选哪个目标?
- 如果只是运行你自己项目里的Java主类,优先用
exec:java,它更简洁,不需要手动处理类路径这些细节。 - 如果需要执行系统命令、shell脚本、Python脚本这类外部程序,就用
exec:exec,它专门用来处理外部进程的调用。
内容的提问来源于stack exchange,提问作者Qoros
相关产品推荐
相关产品推荐

