Запуск штангенциркуля от затмения в тестовой области 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.