3

我正在尝试让我的 Maven 项目在 Windows 7 和 ubuntu 13.04 上运行。在 pom.xml 文件中,我使用 maven-antrun-plugin 调用 在 linux 和 windows 机器上安装的 scons。在这两个操作系统上,我已经验证我可以scons从 shell/cmd 运行,所以它在 PATH 上。pom 看起来像这样:

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-scons</id>
                        <phase>generate-resources</phase>
                        <configuration>
                            <target name="run-scons">
                                <exec executable="scons" dir="${basedir}/../../../" failonerror="true">
                                    <arg value="-j4" />
                                </exec>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

但是当我在 windows7 上构建时,我得到:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (run-scons) on project my-project: An Ant BuildExcept
ion has occured: Execute failed: java.io.IOException: Cannot run program "scons" (in directory "C:\Users\u\samples"): CreateProcess error=2,
The system cannot find the file specified
[ERROR] around Ant part ...<exec dir="C:\Users\u\samples...." executable="scons" failonerror="true">

如果我打开一个 cmd 并从那里运行它,我会得到:

C:\Users\u\samples\>scons
scons: Reading SConscript files ...
Using configuration: scons/win32mscdbg.py

为什么我不能scons从 antrun 插件调用?如果我在 Windows 上指定 scons 的完整路径,它可以工作(例如 C:\Python26\Scripts\scons.bat),但这是不行的,因为开发人员只需要在他们的路径中有 scons,但可以决定位置他们自己。

4

2 回答 2

2

maven exec插件会有所作为吗?

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <id>run-scons</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>scons</executable>
                <workingDirectory>${basedir}/../../../</workingDirectory>
                <arguments>
                    <argument>-j4</argument>
                </arguments>
            </configuration>
        </plugin>

我无法对此进行测试,但看起来您可以在 maven 中将bat 文件(12)作为“可执行文件”运行,而不是在 ant 中使用 bat 文件作为参数运行 shell(在 win 用户下阅读此处)。链接的示例都是绝对路径,这不是你的情况。我建议尝试和反馈。

于 2013-09-13T14:30:59.580 回答
0

这种方法对我来说适用于其他命令。

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>run-scons</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <!-- TODO: fill in the correct os property value -->
          <exec executable="scons" dir="${basedir}/../../../" failonerror="true" 
                os="<os.name property value for Ubuntu>"
            <arg value="-j4" />
          </exec>

          <exec executable="cmd" dir="${basedir}/../../../" failonerror="true" 
                os="Windows 7"
            <arg line="/C scons /> 
            <arg value="-j4" />  <!-- /j4 on windows?  never used scons -->
          </exec>
        </target>
      </configuration>
    </execution>
  </executions>
</plugin>
于 2013-09-13T18:28:22.053 回答