Запуск штангенциркуля от затмения в тестовой области Maven

У меня есть проект Java в Eclipse, с тестами JUnit в моем src/test каталог. Я также добавил класс к своим тестам с микробенчмарками Caliper и хотел бы иметь возможность запускать эти тесты из Eclipse.

Поскольку код Caliper - это тестовый код, я добавил Caliper как зависимость в Maven в test объем. Это заставляет его появляться в пути к классам, когда я запускаю тесты JUnit, но я не вижу способа запустить произвольный класс с тестовыми зависимостями в пути к классам. Я пытался добавить новую конфигурацию запуска для приложения Java, думая, что смогу запустить CaliperMain с правильным классом в качестве параметра, но банка Caliper не находится на пути к классам, и я не вижу, как его добавить.

Я не хочу перемещать мой код и зависимость в main сфера, так как это тестовый код! Кажется, это слишком излишне, чтобы перенести его в совершенно отдельный проект.

1 ответ

Вы должны быть в состоянии сделать это с плагином Maven Exec. Для моего проекта я решил создать эталонный профиль, который можно запустить с помощью команды maven. mvn compile -P benchmarks,

Чтобы настроить что-то вроде этого, вы можете добавить что-то вроде следующего к вашему pom.xml, указав область пути к классу в качестве теста, используя <classpathScope> тег:

<profiles>
    <profile>
        <id>benchmarks</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.2.1</version>
                    <executions>
                        <execution>
                            <id>caliper</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>java</goal>
                            </goals>
                            <configuration>
                                <classpathScope>test</classpathScope>
                                <mainClass>com.google.caliper.runner.CaliperMain</mainClass>
                                <commandlineArgs>com.stackru.BencharkClass,com.stackru.AnotherBenchmark</commandlineArgs>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

В качестве альтернативы, если вы хотите указать много опций для суппорта, возможно, проще использовать <arguments> теги:

<executions>
    <execution>
        <id>caliper</id>
        <phase>compile</phase>
        <goals>
            <goal>java</goal>
        </goals>
        <configuration>
            <classpathScope>test</classpathScope>
            <mainClass>com.google.caliper.runner.CaliperMain</mainClass>
            <arguments>
                <argument>com.stackru.BencharkClass</argument>
                <argument>--instrument</argument>
                <argument>runtime</argument>
                <argument>-Cinstrument.allocation.options.trackAllocations=false</argument>
            </arguments>
        </configuration>
    </execution>
</executions>

Дополнительные параметры конфигурации (например, -Cinstrument.allocation.options.trackAllocations выше) можно найти здесь и другие параметры времени выполнения (например, --instrument выше) можно найти здесь.

Затем, если вы используете плагин Eclipse m2 Maven, вы можете щелкнуть правой кнопкой мыши папку вашего проекта и выбрать Run as... -> Maven Build... и введите что-то вроде clean install в Goals поле ввода и benchmarks в Profiles введите поле и нажмите Run и вы должны увидеть результат в вашей консоли Eclipse.

Важно отметить, что я использовал локальную сборку снимка Caliper, проверив источник с помощью git clone https://code.google.com/p/caliper/, который рекомендуется на момент публикации, чтобы воспользоваться новейшим API.

Другие вопросы по тегам