Можно ли запустить суппорт с помощью команды IntelliJ «запустить» внутри основного?

Я новичок в суппорте и хочу знать, могу ли я создать основной метод, а затем щелкнуть правой кнопкой мыши и выбрать «запустить», используя IntelliJ?

public class Benchmark1 extends Benchmark{

    @Param({"10", "100", "1000", "10000"}) private int length;


    public void timeNanoTime(int reps) {
        for (int i = 0; i < reps; i++) {
            System.nanoTime();
        }
    }

    public static void main(String[] args) {
        CaliperMain.main(Benchmark1.class, args);
    }
}

Когда я пытаюсь запустить вышеуказанное, я получаю эту ошибку:

Experiment selection: 
  Instruments:   [allocation, micro]
  User parameters:   {length=[10, 100, 1000, 10000]}
  Virtual machines:  [default]
  Selection type:    Full cartesian product

This selection yields 8 experiments.
Starting experiment 1 of 8: {instrument=allocation, method=NanoTime, vm=default, parameters={length=10}}
java.lang.RuntimeException: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsed(Ljava/util/concurrent/TimeUnit;)J
    at com.google.caliper.runner.ExperimentingCaliperRun.measure(ExperimentingCaliperRun.java:394)
    at com.google.caliper.runner.ExperimentingCaliperRun.run(ExperimentingCaliperRun.java:207)
    at com.google.caliper.runner.CaliperMain.exitlessMain(CaliperMain.java:131)
    at com.google.caliper.runner.CaliperMain.main(CaliperMain.java:78)
    at com.google.caliper.runner.CaliperMain.main(CaliperMain.java:66)
    at xxxxxxxxxxx(redacted).main(Benchmark1.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.elapsed(Ljava/util/concurrent/TimeUnit;)J
    at com.google.caliper.runner.ExperimentingCaliperRun.getRemainingTrialNanos(ExperimentingCaliperRun.java:406)
    at com.google.caliper.runner.ExperimentingCaliperRun.access$400(ExperimentingCaliperRun.java:95)
    at com.google.caliper.runner.ExperimentingCaliperRun$LineConsumer.call(ExperimentingCaliperRun.java:513)
    at com.google.caliper.runner.ExperimentingCaliperRun$LineConsumer.call(ExperimentingCaliperRun.java:495)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)
The worker exited without producing data. It has likely crashed. Run with --verbose to see any worker output.

An unexpected exception has been thrown by the caliper runner.
Please see https://sites.google.com/site/caliperusers/issues

Process finished with exit code 1

Кроме того, поскольку я использую IntelliJ, и мой суппорт определен в maven как (т.е. область тестирования):

<dependency>
    <groupId>com.google.caliper</groupId>
    <artifactId>caliper</artifactId>
    <version>${caliper-version}</version>
    <scope>test</scope>
</dependency>

Как мне запустить калипер из командной строки?


person Blankman    schedule 03.10.2013    source источник


Ответы (1)


Я предполагаю, что это путаница CLASSPATH. Вероятно, у вас есть старая версия Guava в вашем CLASSPATH, в то время как для Caliper требуется версия 14.0 (где был добавлен метод elapsed(TimeUnit)). Обновите и все.

В случае, если вы не можете обновиться, убедитесь, что Caliper's Guava стоит на первом месте... не знаю, какие проблемы могут возникнуть, но я могу работать.

person maaartinus    schedule 03.10.2013
comment
Перешел на 14 версию, теперь получаю вот это: This selection yields 8 experiments. Starting experiment 1 of 8: {instrument=allocation, method=NanoTime, vm=default, parameters={length=10}} The worker exited without producing data. It has likely crashed. Run with --verbose to see any worker output. Disconnected from the target VM, address: '127.0.0.1:51093', transport: 'socket' - person Blankman; 03.10.2013
comment
Понятия не имею... попробуй --verbose, попробуй добавить отпечатки. - person maaartinus; 03.10.2013
comment
Я не могу добавить --verbose, когда запускаю его правой кнопкой мыши, не так ли? Я пока не знаю, как запустить его через командную строку. - person Blankman; 03.10.2013
comment
Используйте args из CaliperMain.main, как вы написали выше. ;) - person maaartinus; 03.10.2013
comment
Я получил это [trial-1] Exception in thread "main" java.lang.NoClassDefFoundError: IDEA [trial-1] Caused by: java.lang.ClassNotFoundException: IDEA [trial-1] at java.net.URLClassLoader$1.run(URLClassLoader.java:202) [trial-1] at java.security.AccessController.doPrivileged(Native Method) [trial-1] at java.net.URLClassLoader.findClass(URLClassLoader.java:190) [trial-1] at java.lang.ClassLoader.loadClass(ClassLoader.java:306) [trial-1] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [trial-1] at java.lang.ClassLoader.loadClass(ClassLoader.java:247) - person Blankman; 04.10.2013
comment
Понятия не имею, для чего ему нужен IDEA.class; у меня то же самое с Eclipse работает. Думаю, вам следует опубликовать проблему с калипером. - person maaartinus; 04.10.2013