ScalaのリポジトリにCoverallsを導入しようとして嵌った(未解決)

photo credit: tonino62 via photopin cc

以前、CoverallsのCoveralls BadgeをGitHubに表示する方法でCoverallsについて調べた。この時はRailsだったが、ScalaのリポジトリにCoverrallsを導入しようと思い、やってみたところ嵌ったので、記録として残しておく。タイトルにもある通り、解決していない。

手順

  • Coverallsにログインする
  • 対象のリポジトリを追加する

ここまではCoverallsのCoveralls BadgeをGitHubに表示する方法で記述した手順と同じ。以下はScalaの手順。

sbt-scoverageを追加する

scoverage/sbt-scoverageのREADME.mdにHow to useとして以下のように記載されているのでその手順に従って、対応する。

How to use

Add the plugin to your build with the following in project/build.sbt:

resolvers += Classpaths.sbtPluginReleases

addSbtPlugin(“org.scoverage” %% “sbt-scoverage” % “0.99.7.1”)
Add the plugin settings to your project somewhere in build.sbt:

instrumentSettings
Or if you are using Build.scala:

import scoverage.ScoverageSbtPlugin._

.settings(instrumentSettings: _*)
Then run the your tests with coverage enabled by entering:

$ sbt clean scoverage:test

After the tests have finished you should find the coverage reports inside target/scoverage-report.

If you want to see a project that is already setup to use scoverage in both sbt and maven, then clone the scoverage samples project.

続いて、以下のようにも記載されているので、sbt-coverallsを導入する。

Coveralls

If you have an open source project then you can add code coverage metrics with the excellent website http://coveralls.io. Scoverage will integrate with coveralls using the sbt-coveralls plugin.

sbt-coverallsを追加する

scoverage/sbt-coverallsのREADME.mdにInstallationとして以下のように記載されているのでその手順に従って、対応する。

Installation

1) Add the following to your project/build.sbt file

resolvers += Classpaths.sbtPluginReleases

addSbtPlugin(“org.scoverage” % “sbt-scoverage” % “0.99.7.1”)

addSbtPlugin(“org.scoverage” %% “sbt-coveralls” % “0.99.0”)
2) Import the settings in your build file

for build.sbt:

Add the following to the top of your build.sbt:

import scoverage.ScoverageSbtPlugin.instrumentSettings
import org.scoverage.coveralls.CoverallsPlugin.coverallsSettings
for build.scala projects:

Import the plugin settings, and add them to your project settings (example):

import scoverage.ScoverageSbtPlugin.instrumentSettings
import org.scoverage.coveralls.CoverallsPlugin.coverallsSettings

lazy val project = Project(

settings = defaultSettings ++ intsrumentSettings ++ coverallsSettings
)
Coveralls configuration options (such as Specifying Your Repo Token) must come after this line.

3) Register on https://coveralls.io/

4) Follow the instructions for either Travis CI or Manual Usage

エラーがでる

ここまで対応して、ビルドしてみると、以下のようなエラーがでてしまう。

java.lang.NoClassDefFoundError: org/eclipse/jgit/storage/file/FileRepository
    at com.typesafe.sbt.git.DefaultReadableGit.(ReadableGit.scala:23)
    at com.typesafe.sbt.SbtGit$$anonfun$4.apply(SbtGit.scala:78)
    at com.typesafe.sbt.SbtGit$$anonfun$4.apply(SbtGit.scala:78)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.EvaluateSettings$MixedNode.evaluate0(INode.scala:177)
    at sbt.EvaluateSettings$INode.evaluate(INode.scala:135)
    at sbt.EvaluateSettings$$anonfun$sbt$EvaluateSettings$$submitEvaluate$1.apply$mcV$sp(INode.scala:67)
    at sbt.EvaluateSettings.sbt$EvaluateSettings$$run0(INode.scala:76)
    at sbt.EvaluateSettings$$anon$3.run(INode.scala:72)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
:

ぐぐってみたところ、以下にたどり着く。

Classloader conflict between local and global plugins · Issue #1428 · sbt/sbt

どうやらライブラリ内で依存しているjgitのヴァージョンが異なるためにエラーになっている模様。最後に「Thanks @dansanduleac. I have created a PR against gh-pages.」と書いてあることから競合しているライブラリを特定し、さらにそのライブラリに対してプルリクエストを送らなければならない模様…。Scala初心者にはちょっと辛いので、一旦封印1する。

参考資料


  1. 見なかったことにするの意