如何在调用Maven的exec-maven-plugin时继承当前路径?

时间:2010-05-12 17:11:44

标签: maven-2 maven

我有<exec-maven-plugin>调用外部命令(在本例中为svnversion)。该命令位于当前用户的路径中。

但是,当插件生成单独的shell时,路径不会初始化。我不想为每个外部命令硬编码或定义变量(维护太多,特别是有Windows和* nix用户)。

我的pom.xml包含以下内容:

  <plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <version>1.1</version>
 <executions>
  <execution>
   <id>svnversion-exec</id>
   <phase>process-resources</phase>
   <goals>
    <goal>exec</goal>
   </goals>
   <configuration>
    <executable>svnversion</executable>
    <arguments>
     <argument><![CDATA[ >version.txt ]]></argument>
    </arguments>
   </configuration>
  </execution>
 </executions>
  </plugin>

目前我得到以下输出:

[INFO] [exec:exec {execution: svnversion-exec}] 'svnversion' is not recognized as an internal or external command, operable program or batch file.

[ERROR] BUILD ERROR: Result of cmd.exe /X /C "svnversion >version.txt" execution is: '1'.

谢谢!

2 个答案:

答案 0 :(得分:0)

这很奇怪,因为正如文档中所写,executable参数不一定是可执行文件的完整路径:

  

可执行文件。可以是完整路径或名称可执行文件。在后一种情况下,可执行文件必须位于PATH中才能执行。

在我的计算机上(svnversion位于/usr/bin/中的PATH),您发布的配置正常工作(我使用完全相同的代码段):

$ mvn process-resources
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Q2821100
[INFO]    task-segment: [process-resources]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/Q2821100/src/main/resources
[INFO] [exec:exec {execution: svnversion-exec}]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Wed May 12 21:30:35 CEST 2010
[INFO] Final Memory: 7M/87M
[INFO] ------------------------------------------------------------------------
$ cat version.txt 
exported

也许仔细检查正在运行maven的用户的PATH。另外,为什么你说产生了一个shell?谁产卵那壳?

答案 1 :(得分:0)

我看了this

插件将按以下顺序搜索可执行文件:

  • 相对于项目的根
  • 作为工具链可执行文件
  • 相对于工作目录(仅限Windows)
  • 相对于系统属性PATH(仅限Windows)
  • 中指定的目录

否则按原样使用可执行文件。

所以“仅限Windows”!