我正在使用gradle 4.5,scala 2.11.11 / 2.12.4和JDK 1.8.0_162构建scala项目,并且它工作正常,直到我升级到scala 2.11.12。随着2.11.12我不断收到编译错误
ScalaCompileOptions.metaClass.useAnt = false
我一直在尝试在谷歌搜索并添加一些像
这样的东西targetCompatibility="1.8"
或者
static int index=var;
但他们都没有解决问题。
答案 0 :(得分:3)
好的,经过几个星期的努力解决这个问题并决定发布SO之后,我尝试用gradle进一步调整,我终于设法解决了这个问题。
原来我必须将这两行添加到gradle
project.tasks.compileScala.scalaCompileOptions.additionalParameters = [" -target:jvm-1.8"] project.tasks.compileTestScala.scalaCompileOptions.additionalParameters = [" -target:jvm-1.8"]
这是解决问题的方法,它不会回来。
答案 1 :(得分:2)
对于使用scala-maven-plugin
的maven的用户,@ Wins答案的补充。您需要在插件配置中添加以下行:
<addScalacArgs>-target:jvm-1.8</addScalacArgs>
答案 2 :(得分:1)
“接口中的静态方法需要-target:jvm-1.8”
此编译错误明确指出,正在调用Interface的静态方法,并且由于Java 1.8版的Interfaces中提供了静态方法,因此通常需要Target JVM 1.8版。
但是,根据问题语句,从Scala完成对Java Interface静态方法的调用调用。因此,需要Java界面周围的scala包装器,以便构建工具/编译器可以理解它。
如果以这种方式访问代码,它将起作用:
/*************** Java Code ***************/
package a;
import a.A ;
interface NewInterface {
// static method
static String sayHello(String name)
{
<Statement ....> // calls other Java Class methods => say A.x(); [Assume, class A is from package 'a' and x,y,z are some static methods]
<Statement ....> // calls other Java Class methods => say A.y();
<Statement ....> // calls other Java Class methods => say A.z();
return "Hello, "+name ;
}
}
/*************** Scala Wrapper ***************/
// Scala Wrapper for Java's Interface
package b
import a.A // importing the Java class A
trait NewTrait {
def sayHello(name: String): String = {
<Statement ....> A.x() // make code in scala to replicate same functionality of the static method
<Statement ....> A.y() // by using Java Classes.
<Statement ....> A.z()
"Hello, "+name
}
}
/*************** Scala call on Static methods of Interface ***************/
// Scala Object calls Wrapper instead of Java Interface
package b
import b.NewTrait
object NewObject extends App with NewTrait { // Wrapper has to be extended instead of calling a java's Interface static method directly.
sayHello("James") // Resolved: "Static methods in interface require -target:jvm-1.8"
}