Как вызвать сценарий ruby ​​как часть процесса сборки Maven?

изменить 2: Я нашел проблему. Быстрый ответ заключается в том, что проблема заключалась в отсутствии <id> для моего недавно настроенного выполнения. Я оставлю вопрос здесь на случай, если он поможет кому-то еще.

У меня есть скрипт ruby, который генерирует некоторые исходные файлы jUnit.

Я пытаюсь использовать 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 (для запуска ruby supporting_files/ruby/CreateUnitTests.rb перед запуском тестов jUnit), но использовать java в противном случае? Каков "правильный" способ вызова скриптов на этапе генерации тестовых источников? ?

редактировать: проблема, похоже, больше, чем просто изменение того, какой исполняемый файл вызывается...

Я написал быструю java-программу, которая просто вызывает интерпретатор ruby, передавая его (имя файла 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...


person MrDrews    schedule 10.08.2011    source источник
comment
Похоже, проблема не только в exec.executable, я отредактирую свой вопрос.   -  person MrDrews    schedule 12.08.2011


Ответы (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>          
person MrDrews    schedule 12.08.2011
comment
Спасибо, Дрюс, у меня все получилось! Я хотел, чтобы мои тесты rspec запускались как часть сборки и терпели неудачу, если они не выполнялись. - person Jazzepi; 19.12.2013