codacy / codacy-coverage-reporter

Multi-language coverage reporter for Codacy
https://www.codacy.com
Other
134 stars 94 forks source link

Java 8 Required? #55

Closed jeremylong closed 7 years ago

jeremylong commented 7 years ago

Build on travis-ci for OWASP dependency-check fails to post results to Codacy due to the use Java 8 APIs within the codacy-coverage-reporter (or one of its dependencies). The README indicates that Java 7 can be used.

java.time.format.DateTimeFormat was added in Java 1.8.

JDK

OpenJDK 1.7.0_80

Expected Behavior

  1. Code coverage results would get posted to dependency-check on Codacy (here) given the configured .travis.yml

Actual Behavior

The codacy-coverage-reporter fails with the following exception:

2017-05-27 16:25:36,899 %PARSER_ERROR[coloredLevel] com.codacy Parsing coverage data... 
Exception in thread "main" java.lang.NoClassDefFoundError: java/time/format/DateTimeFormatter
    at play.api.libs.json.DefaultWrites$class.$init$(Writes.scala:302)
    at play.api.libs.json.Writes$.<init>(Writes.scala:86)
    at play.api.libs.json.Writes$.<clinit>(Writes.scala)
    at rapture.json.jsonBackends.play.PlayAst$.fromDouble(ast.scala:154)
    at rapture.json.Serializers$$anonfun$intSerializer$1.apply(serializers.scala:37)
    at rapture.json.Serializers$$anonfun$intSerializer$1.apply(serializers.scala:37)
    at rapture.json.BasicJsonSerializer.serialize(serializers.scala:28)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2$$anonfun$apply$3$$anon$3.serialize(CodacyCoverageReporter.scala:142)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2$$anonfun$apply$3$$anon$3.serialize(CodacyCoverageReporter.scala:142)
    at rapture.json.Json$.apply(json.scala:102)
    at com.codacy.api.helpers.FileHelper$.writeJsonToFile(FileHelper.scala:49)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2$$anonfun$apply$3.apply(CodacyCoverageReporter.scala:142)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2$$anonfun$apply$3.apply(CodacyCoverageReporter.scala:135)
    at com.codacy.CodacyCoverageReporter$.com$codacy$CodacyCoverageReporter$$transform(CodacyCoverageReporter.scala:185)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2.apply(CodacyCoverageReporter.scala:134)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1$$anonfun$apply$2.apply(CodacyCoverageReporter.scala:134)
    at com.codacy.parsers.CoverageParserFactory$$anonfun$withCoverageReport$1.apply(CoverageParser.scala:42)
    at com.codacy.parsers.CoverageParserFactory$$anonfun$withCoverageReport$1.apply(CoverageParser.scala:40)
    at scala.Option.map(Option.scala:146)
    at com.codacy.parsers.CoverageParserFactory$.withCoverageReport(CoverageParser.scala:39)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1.apply(CodacyCoverageReporter.scala:134)
    at com.codacy.CodacyCoverageReporter$$anonfun$coverageWithTokenAndCommit$1.apply(CodacyCoverageReporter.scala:128)
    at com.codacy.api.helpers.FileHelper$$anonfun$withTokenAndCommit$1$$anonfun$apply$2.apply(FileHelper.scala:21)
    at com.codacy.api.helpers.FileHelper$$anonfun$withTokenAndCommit$1$$anonfun$apply$2.apply(FileHelper.scala:19)
    at scala.Option.map(Option.scala:146)
    at com.codacy.api.helpers.FileHelper$$anonfun$withTokenAndCommit$1.apply(FileHelper.scala:19)
    at com.codacy.api.helpers.FileHelper$$anonfun$withTokenAndCommit$1.apply(FileHelper.scala:18)
    at com.codacy.api.helpers.FileHelper$$anonfun$withCommit$2.apply(FileHelper.scala:34)
    at com.codacy.api.helpers.FileHelper$$anonfun$withCommit$2.apply(FileHelper.scala:33)
    at scala.Option.map(Option.scala:146)
    at com.codacy.api.helpers.FileHelper$.withCommit(FileHelper.scala:33)
    at com.codacy.api.helpers.FileHelper$.withTokenAndCommit(FileHelper.scala:18)
    at com.codacy.CodacyCoverageReporter$.coverageWithTokenAndCommit(CodacyCoverageReporter.scala:128)
    at com.codacy.CodacyCoverageReporter$.codacyCoverage(CodacyCoverageReporter.scala:161)
    at com.codacy.CodacyCoverageReporter$.main(CodacyCoverageReporter.scala:88)
    at com.codacy.CodacyCoverageReporter.main(CodacyCoverageReporter.scala)
Caused by: java.lang.ClassNotFoundException: java.time.format.DateTimeFormatter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 36 more

Reproducible Test Case

The failing project can be found on github here.

To view the stack trace described above you must go to the travis build that looks like a success found here, scroll to the bottom and then click on the after_success button.

rtfpessoa commented 7 years ago

We recently added rapture as a dependency to abstract the json implementations and it seems to depend on Java 8. Maybe you can use version 1.0.13 while you cannot migrate to Java 8. Let me know if it works.

jeremylong commented 7 years ago

Thanks, I changed my script to be:

before_install:
  - wget -O ~/codacy-coverage-reporter-assembly.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/1.0.13/codacy-coverage-reporter-1.0.13-assembly.jar 

after_success:
  - java -cp ~/codacy-coverage-reporter-assembly.jar com.codacy.CodacyCoverageReporter -l Java -r build-reporting/target/coverage-reports/jacoco.xml

This works, as long as any new required features don't show up in newer version of the Codacy Coverage Reporter.

As a build plugin author myself I've been very careful to ensure tools work with older versions of Java as people are slow to upgrade. I'm not sure about the sbt space, but in Maven I've used animal-sniffer-maven-plugin to ensure my dependencies don't exceed the minimum Java version I want to support.

Thanks!

jeremylong commented 7 years ago

To correct my statement above - I use animal sniffer to make sure I don't accidentally call a newer API. I use travis-ci running with Java 7 to ensure I don't upgrade a dependency that exceeds my minimum Java level for a plugin.

Regardless, this issue can be closed.

rtfpessoa commented 7 years ago

We need to check if there is something similar to Scala and improve the release process. Thanks for the tip.