2011-08-10 79 views
2

编辑2:我发现了这个问题。快速回答是缺少<id>为我新配置的执行导致了问题。如果它帮助别人,我会在这里留下问题。作为Maven构建过程的一部分,我如何调用ruby脚本?

我有一个ruby脚本,它会生成一些我的jUnit源文件。

我想在default lifecycle的generate-sources阶段使用exec-maven-plugin来调用这个ruby脚本。以下是我已经添加到我的POM来实现这一目标:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2</version> 
     <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>exec</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <executable>ruby</executable> 
      <workingDirectory>supporting_files/ruby</workingDirectory> 
      <arguments> 
       <argument>CreateUnitTests.rb</argument> 
      </arguments> 
     </configuration> 
    </plugin>   

这似乎是工作,当我在做一个“清理并生成主项目”在NetBeans(clean install),但是当我运行该项目(process-classes org.codehaus.mojo:exec-maven-plugin:1.1.1:exec与性能:)

exec.classpathScope=runtime 
exec.args=-enableassertions -classpath %classpath org.example.MyProject.App 
exec.executable=java 

的运行失败, 因为它试图利用 ruby作为exec.executable (我告诉它在POM)。

那么, 我怎么使用 ruby暂时(运行JUnit测试之前运行 ruby supporting_files/ruby/CreateUnitTests.rb),但使用 java否则? 什么是在生成测试源阶段调用脚本的“正确”方式

编辑:这个问题似乎不仅仅是改变被称为其可执行更多...

我写了一个快速的Java程序,它只是调用Ruby解释器,通过它(红宝石文件名)收到作为命令行参数:

import java.io.IOException; 

public class RunRuby { 
    public static void main(String args[]) throws IOException {   
     Runtime run = Runtime.getRuntime(); 
     run.exec("ruby "+args[0]); 
    } 
} 

这让我避免在我的POM改变可执行文件:

<plugin> 
     <!-- use ruby to generate some jUnit tests --> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2</version> 
     <executions> 
      <execution> 
       <phase>generate-test-sources</phase> 
       <goals> 
        <goal>exec</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <executable>java</executable> 
      <workingDirectory>supporting_files/ruby</workingDirectory> 
      <arguments> 
       <argument>RunRuby</argument>      
       <argument>CreateUnitTests.rb</argument> 
      </arguments> 
     </configuration> 
    </plugin>   

丑,我知道。但无论如何,干净/构建仍然按预期工作,但“运行”仍然失败!这里的错误消息:

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.1.1:exec (default-cli) on project MyProject: Result of cmd.exe /X /C "java -enableassertions -classpath C:\Dropbox\dev\java\MyProject\target\classes;C:\Users\username\.m2\repository\LOTS\OF\JARS org.example.MyProject.App" execution is: '-1'. -> [Help 1] 

所以,这回跑java,但还是失败了。我注意到一个奇怪的是,它的执行目标org.codehaus.mojo:exec-maven-plugin:1.1.1:exec即使在POM我告诉它使用版本1.2 ...

+0

好像问题不只是exec.executable,我将修改我的问题.. – MrDrews

回答

1

缺乏<id>引起了我定制的执行成为默认。这里的修复:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.2</version> 
     <executions> 
      <execution> 
       <!-- use ruby to generate some jUnit tests during generate-test-sources --> 
       <id>generate-test-sources</id> 
       <configuration> 
        <executable>ruby</executable> 
        <workingDirectory>supporting_files/ruby</workingDirectory> 
        <arguments> 
         <argument>CreateUnitTests.rb</argument> 
        </arguments> 
       </configuration>      
       <phase>generate-test-sources</phase> 
       <goals> 
        <goal>exec</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin>   
+0

感谢德鲁斯,运作良好,对我来说!我想要一些东西来运行我的rspec测试作为构建的一部分,如果它们不运行,就会失败。 – Jazzepi

相关问题