2013-08-23 9 views
5

私はsrc/testディレクトリにJUnitテストを含むEclipseプロジェクトを持っています。 Caliperのマイクロベンチマークでテストにクラスを追加しました。これらのテストをEclipse内から実行できるようにしたいと考えています。メイプルのテストスコープのeclipseからキャリパーを実行

Caliperコードはテストコードなので、私はtestスコープでMavenの依存関係としてCaliperを追加しました。 JUnitテストを実行するとクラスパスに表示されますが、クラスパスにテスト依存関係のある任意のクラスを実行する方法はありません。私がやったことは、Javaアプリケーションの新しい実行コンフィギュレーションを追加して、適切なクラスをパラメータとしてCaliperMainを起動できると思っていましたが、Caliper jarがクラスパス上になく、追加方法がわかりません。

ベンチマークコードと依存関係をテストコードのようにmainスコープに移動したくありません。それを完全に別のプロジェクトに移すことは、真剣に過度の余裕があるようです。

+0

Eclipse実行コンフィギュレーションでは、自分のクラスパスのための "Maven Dependencies"が表示されます。テスト依存関係と非依存関係を分離しているようには見えません。 Caliperが実際に含まれていることを確認しましたか? – gk5885

+0

@ gk5885では、パッケージエクスプローラで使用できます。パッケージパスは、 'JUnit'タイプのコンフィグレーションを実行しているときにクラスパスで使用できますが、 'Javaアプリケーション'タイプのコンフィグレーションを実行しているときはクラスパスでは使用できません。 –

+0

私はあなたのシナリオを完全に理解していません。特に、 "クラスパスにテスト依存関係のある任意のクラスを実行してください"。 CaliperMainが主な方法で通常行っていることとまったく同じようにJUnitテストを作成して実行できますか? – Morfic

答えて

5

Maven Exec Pluginでこれを行うことができます。私のプロジェクトでは、mavenコマンドmvn compile -P benchmarksで実行できるベンチマークプロファイルを作成することにしました。あなたの場合」、代わり

<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.stackoverflow.BencharkClass,com.stackoverflow.AnotherBenchmark</commandlineArgs> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

:このような何かを設定するには

は、あなたが<classpathScope>タグを使用してテストとしてクラスパスの範囲を指定して、あなたのpom.xmlに次の線に沿って何かを追加することができますキャリパーのための多くのオプションを指定したいと、おそらく<arguments>タグを使用する方が簡単ですd次の

<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.stackoverflow.BencharkClass</argument> 
       <argument>--instrument</argument> 
       <argument>runtime</argument> 
       <argument>-Cinstrument.allocation.options.trackAllocations=false</argument> 
      </arguments> 
     </configuration> 
    </execution> 
</executions> 

詳細設定オプション(LI ke -Cinstrument.allocation.options.trackAllocations上記)はhereであり、より多くの実行時オプション(上記--instrumentなど)はhereです。あなたは、Eclipse平方メートルMavenプラグインを使用している場合

次に、あなたのプロジェクトフォルダを右クリックし、Run as... -> Maven Build...を選択してProfiles入力ボックスにGoals入力ボックスとbenchmarksclean installのようなものを入力してRunをクリックしてすることができますEclipseコンソールに出力が表示されます。

キャリパーのローカルスナップショットビルドは、最新のAPIを利用するためにこの投稿時点で推奨されているgit clone https://code.google.com/p/caliper/を使用してソースをチェックアウトすることに注意してください。

+0

これは私にエラーをもたらします: '' '[stderr] 1のCICompilerCountは無効です;少なくとも2でなければなりません [stderr]エラー:Java仮想マシンを作成できませんでした。 [stderr]エラー:致命的な例外が発生しました。プログラムは終了します。 '' ' これを解決する方法、つまり必要な引数をJVMに渡す方法を教えてください。 – panmari

関連する問題