非公式のようですが、マニュアルが日本語化されているのでスムーズに勉強できます。
http://playdocja.appspot.com/
チュートリアルが逸脱で、今まで様々な環境のチュートリアルを見てきましたが、PlayFrameworkのチュートリアルは群を抜いて分かりやすいです。(といっても一回読んだだけで全てを理解するのは難しいですが)
基本的に書いてあるとおりに勉強していけば問題ないのですが、最後の方のテストの完了で躓いたので備忘録としてまとめます。
ページ下部の方に、コードカバレッジ計測、という項目がありますが、公式も含めてここに書かれている通りにしてもエラーが発生します。
説明どおりにapplication.confを修正してEclipseからPlayをテストモードで起動しても、Play終了時にcoberturaはコードカバレッジレポートを生成してくれません。
何故かというとPlay本体にはcoberturaは含まれていないからです。
以下、PlayをEclipseから起動した際のコンソールビューの内容です。
---------------------------------------------
Listening for transport dt_socket at address: 8000
00:09:42,662 INFO ~ Starting /home/dev-user/work/play_projects/yabe
00:09:42,666 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.crud)
00:09:42,667 INFO ~ Module crud is available (/home/dev-user/local/play-1.2.1/modules/crud)
00:09:42,667 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.secure)
00:09:42,667 INFO ~ Module secure is available (/home/dev-user/local/play-1.2.1/modules/secure)
00:09:42,667 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.cobertura)
00:09:42,668 ERROR ~ Module cobertura will not be loaded because /home/dev-user/local/play-1.2.1/modules/cobertura does not exist
00:09:43,380 WARN ~ Actually play.tmp is set to null. Set it to play.tmp=none
00:09:43,391 WARN ~ You're running Play! in DEV mode
---------------------------------------------
なので、coberturaをインストールしなければなりません。
インストールにはplay installコマンドを使います。
プロジェクトディレクトリに移動したら「play install cobertura」を実行します。これだけでインストール完了です。
続けて「play test」を実行してからhttp://localhost:9000/@testsにアクセスして、テストを実行してからコンソールでctrl-cでPlayサーバを停止すると、正常にcoberturaがコードカバレッジレポートを生成してくれます。
ただし、Eclipseを使っている場合はこれだけではエラーになってしまいます。
通常、クラスパスを変更するような修正を行った場合、プロジェクトディレクトリで再度eclipsifyコマンドを実行する必要がありますが、今回はそれを実行してもEclipseからテストモードでPlayを起動してアクセスするとエラーが表示されてしまいました。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-j_yVzvGBBuaoC7NX-GnMrDsZQNesq-gbHcX80QepCNw4LDwgoauS0PMlWGVJ_4y8JCJtXQUixybWr1H8TI8H_kGE_CuThttOP0TXABf6a_3RvP-RMAeWpV9pKbdfEJ7PbUWgFzJvTQ0/s320/eclipse_error.png)
EclipseのコンソールビューはJavaのエラーが延々と
--------------------------------------------
Listening for transport dt_socket at address: 8000
20:43:48,811 INFO ~ Starting /home/dev-user/work/play_projects/yabe
20:43:48,816 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.crud)
20:43:48,817 INFO ~ Module crud is available (/home/dev-user/local/play-1.2.1/modules/crud)
20:43:48,817 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.secure)
20:43:48,817 INFO ~ Module secure is available (/home/dev-user/local/play-1.2.1/modules/secure)
20:43:48,817 WARN ~ Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.cobertura)
20:43:48,817 INFO ~ Module cobertura is available (/home/dev-user/local/play-1.2.1/modules/cobertura-2.1)
20:43:49,465 WARN ~ You're running Play! in DEV mode
~
~ Go to http://localhost:9000/@tests to run the tests
~
20:43:49,578 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
20:44:07,139 ERROR ~
@67578a30n
Internal Server Error (500) for request GET /@tests
Compilation error (In {module:cobertura-2.1}/app/controllers/Cobertura.java around line 6)
The file {module:cobertura-2.1}/app/controllers/Cobertura.java could not be compiled. Error raised is : play.modules.cobertura.CoberturaPlugin cannot be resolved
play.exceptions.CompilationException: play.modules.cobertura.CoberturaPlugin cannot be resolved
at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:246)
at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:672)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:516)
at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:278)
at play.classloading.ApplicationClasses$ApplicationClass.compile(ApplicationClasses.java:249)
at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:150)
at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at play.classloading.ApplicationClasses.getAssignableClasses(ApplicationClasses.java:61)
at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:435)
at {module:crud}/app/views/tags/crud/types.tag.(line:3)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213)
at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:347)
at {module:crud}/conf/routes.(line:4)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213)
at play.templates.Template.render(Template.java:26)
at play.mvc.Router.parse(Router.java:162)
at play.mvc.Router.parse(Router.java:190)
at play.mvc.Router.parse(Router.java:164)
at play.mvc.Router.load(Router.java:50)
at play.mvc.Router.detectChanges(Router.java:219)
at Invocation.HTTP Request(Play!)
20:44:07,561 ERROR ~
@67578a30o
Internal Server Error (500) for request GET /favicon.ico
Compilation error (In {module:cobertura-2.1}/app/controllers/Cobertura.java around line 6)
The file {module:cobertura-2.1}/app/controllers/Cobertura.java could not be compiled. Error raised is : play.modules.cobertura.CoberturaPlugin cannot be resolved
play.exceptions.CompilationException: play.modules.cobertura.CoberturaPlugin cannot be resolved
at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:246)
at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:672)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:516)
at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:278)
at play.classloading.ApplicationClasses$ApplicationClass.compile(ApplicationClasses.java:249)
at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:150)
at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at play.classloading.ApplicationClasses.getAssignableClasses(ApplicationClasses.java:61)
at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:435)
at {module:crud}/app/views/tags/crud/types.tag.(line:3)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213)
at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:347)
at {module:crud}/conf/routes.(line:4)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:213)
at play.templates.Template.render(Template.java:26)
at play.mvc.Router.parse(Router.java:162)
at play.mvc.Router.parse(Router.java:190)
at play.mvc.Router.parse(Router.java:164)
at play.mvc.Router.load(Router.java:50)
at play.mvc.Router.detectChanges(Router.java:219)
at Invocation.HTTP Request(Play!)
---------------------------------------------------
EclipseからPlayを起動する際のクラスパスの設定が異なっているためで、eclipsifyではcoberturaを追加してくれない様です。
そこで、Eclipseの実行構成から、eclipsifyで自動的に生成されているサーバに、coberturaのjarファイルを手動で追加してあげる必要があります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0MK9I7KLwdFCWeAp3eoVVCis_SRnQrPKq3bKmMNXQh1-yxgC9BcfW4KM926H_g6RiX2gWV72lvM5T07t2EZD_e6lju5T6VEmhZJX4wcUCL7FB3b6qVbUyanFh4K4Us8aoGNAna4mJzG8/s320/eclipse_1.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_SiuIugpjcZyIhyW4nvOHZMBiqtWF7srWls15z05bpfNRX7zD1osYdiQM3sS2Dtj4Fv-8N_bBr33Fg2xb2PI9bJA4PC7gyURnUeSv7jO2oISHohNZDQrDUWwYMrKm1LtS5zPqcVSjgGY/s320/eclipse_2.png)
ユーザエントリーを選択して、外部Jar追加を選択後、cobertura/lib/*.jarを選択して追加してください。
それが終わった後にEclipseからPlayサーバをテストモードで起動すれば、問題なくcoberturaが動作します。
0 件のコメント:
コメントを投稿