私はMavenプロジェクトに取り組んでおり、jmhを使用してコードをベンチマークしたいと考えています。プロジェクトにソースコード、単体テスト、ベンチマークが含まれるように整理したいと思います。別のグラデルプロジェクト(link参照)を作成せずに、コードをベンチマークする方法があると思われます。 Mavenでこれを行う方法はありますか?別のMavenプロジェクトを作成せずにjmhを使用してベンチマークを行う
5
A
答えて
7
短い回答ははいです。
あなたはそれを達成するためのプラグインのカップルを必要とする
+- src/
+- main/java - sources
+- test/
+- java - test sources
+- perf - benchmarks
私は私のプロジェクトでは、このディレクトリレイアウトに出会った(しかし、あなたは間違いなくそれを変更することができます)。
build-helper-maven-plugin
カスタムテストソース場所付着する
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/perf</source>
</sources>
</configuration>
</execution>
maven-compiler-plugin
test-compile
相<execution>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</execution>
に
jmh-generator-annprocess
注釈プロセッサを実行するために、
maven-assembly-plugin
はベンチマークその後
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<attach>true</attach>
<archive>
<manifest>
<mainClass>org.openjdk.jmh.Main</mainClass>
</manifest>
</archive>
</configuration>
</execution>
<assembly>
<id>perf-tests</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>test</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
</assembly>
を持つ実行可能なjarファイルを作成しますいつものように実行することができベンチマークで実行可能なjarファイルを取得します
java -jar target/your-project-version-perf-tests.jar
作業例hereを見ることができます。
NOTE
は、このソリューションの唯一の欠点は、すべてのテストクラスとテストの依存関係も間違いなくそれをbloatsベンチマークとjarファイルに含まれることです。しかし、別の(${project.build.directory}/test-classes
以外の)ディレクトリにベンチマークをコンパイルすることで回避できます。
関連する問題
- 1. jmh:ベンチマークを同時に実行する
- 2. IntellijのJMHでベンチマークを行う方法は?
- 3. InteliJを使用してmavenプロジェクトにjarファイルを作成する
- 4. JMHを使用して '&' vs '%'コストを正しくベンチマークする方法
- 5. ソースツリーを使用せずに別のプロジェクトにXcodeプロジェクトをインポート
- 6. jmhベンチマークでメソッドを生成するには?
- 7. UITabBarControllerでプロジェクトを作成せずにUITabBarを使用する
- 8. プロジェクトを作成せずにEclipse CDTを使用する
- 9. 既存のMavenプロジェクトにJMHコードを統合
- 10. archetypeを使用してmavenプロジェクトを作成中にプロンプトを表示
- 11. 別のJavaプログラムを使用してeclipse GUIを使用せずにJavaプロジェクトをクリーンアップして構築する
- 12. スワイプでストーリーボードを使用せずにビューを作成して移行する
- 13. blopy biopythonを使用してファイルを作成せずに
- 14. 別のアクティビティを作成せずにボタンをクリックして別のxmlを表示
- 15. 別のテーブルを作成せずにテーブルを作成する
- 16. djangoプロジェクトを作成せずにDjango 1.8.5 ORMを使用するには?
- 17. m2eを使用して単純なmavenプロジェクトを作成する方法
- 18. IntelliJとMaven - Mavenプロジェクトを作成できません
- 19. GWTのMavenプロジェクトは、私がこのようにMavenの構成でGWTプロジェクトを作成したDEVMODE
- 20. 参照を追加せずにプレビルドイベントで別のプロジェクトを作成する
- 21. IntelliJ IDEAを使用してMavenプロジェクトを実行
- 22. mavenプロジェクト用の新しいmaven依存プラグインの作成方法
- 23. ウェブインタフェースを使用せずにJavaScriptを使用してテキストファイルを作成する
- 24. ブロックを使用せずにARCを使用してシングルトンを作成する
- 25. GWT Mavenプロジェクトを作成します。
- 26. 新しく作成したMavenスナップショットを別のプロジェクトに追加する
- 27. プロジェクトを作成せずにleiningenを使ってライブラリをインストールする
- 28. jmhベンチマークから状態を変更する際のベストプラクティス
- 29. maven for springを使用した実行可能ファイルの作成
- 30. GTX with mavenプロジェクトの作成
実際の例(ExampleBenchmark.javaのdoSomethingTest)では、forループを避ける方が良いでしょう。これは、JVMのループ最適化による意図しないパフォーマンス結果を招くためです。 –