私は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. java.lang.NoClassDefFoundError:javaslang/collection/LinkedHashMap jmhを使用したバネデータアプリケーションのベンチマーク中
- 3. IntellijのJMHでベンチマークを行う方法は?
- 4. JMHを使用して '&' vs '%'コストを正しくベンチマークする方法
- 5. InteliJを使用してmavenプロジェクトにjarファイルを作成する
- 6. ソースツリーを使用せずに別のプロジェクトにXcodeプロジェクトをインポート
- 7. jmhベンチマークでメソッドを生成するには?
- 8. Mavenを使用せずに動的なWebプロジェクトを構築
- 9. プロジェクトを作成せずにEclipse CDTを使用する
- 10. UITabBarControllerでプロジェクトを作成せずにUITabBarを使用する
- 11. JMHベンチマークのmaxmiumヒープサイズを報告してください
- 12. 既存のMavenプロジェクトにJMHコードを統合
- 13. mavenプロジェクトを作成できません
- 14. Mavenを使用したスタジオエラー実行プロジェクト
- 15. archetypeを使用してmavenプロジェクトを作成中にプロンプトを表示
- 16. Mavenは別のMavenプロジェクトのソースを生成します
- 17. 別のJavaプログラムを使用してeclipse GUIを使用せずにJavaプロジェクトをクリーンアップして構築する
- 18. スワイプでストーリーボードを使用せずにビューを作成して移行する
- 19. blopy biopythonを使用してファイルを作成せずに
- 20. JMH BenchmarkはSpring(Mavenを含む)プロジェクトのAutowiredフィールドでNullPointerExceptionを取得します
- 21. 別のアクティビティを作成せずにボタンをクリックして別のxmlを表示
- 22. スクリーンセーバータイプのプロジェクトを使用せずにxcodeで.saverファイルを作成する
- 23. 別のテーブルを作成せずにテーブルを作成する
- 24. m2eを使用して単純なmavenプロジェクトを作成する方法
- 25. djangoプロジェクトを作成せずにDjango 1.8.5 ORMを使用するには?
- 26. GWTのMavenプロジェクトは、私がこのようにMavenの構成でGWTプロジェクトを作成したDEVMODE
- 27. IntelliJとMaven - Mavenプロジェクトを作成できません
- 28. IntelliJ IDEAを使用してMavenプロジェクトを実行
- 29. mavenプロジェクト用の新しいmaven依存プラグインの作成方法
- 30. 参照を追加せずにプレビルドイベントで別のプロジェクトを作成する
実際の例(ExampleBenchmark.javaのdoSomethingTest)では、forループを避ける方が良いでしょう。これは、JVMのループ最適化による意図しないパフォーマンス結果を招くためです。 –