我有一个依赖Scala和Gradle作为构建工具的项目暂停了一段时间。我回到它,并首先将Gradle升级到4.2(之前的版本是3.2)。
在升级之后,我无法再构建我的项目,它总是在测试中失败。例如,这是我得到的输出:
kbreconstruction.TestBiasComponents > initializationError FAILED
java.lang.NoSuchMethodError at TestBiasComponents.scala:23
其中第23行只是
describe("...")
最新的声明。
几个月前唯一改变的是我删除了一些不再工作的maven存储库(以前没有使用过)。
我得到的实际错误是
java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef;
这看起来有一个Scala版本不匹配,但我想知道它之前是如何工作的呢? 之前有没有人有类似的问题?
我的build.gradle看起来像这样
version '1.2'
apply plugin: 'java'
apply plugin: 'scala'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin:'application'
mainClassName = 'CommandLine'
ext {
scalaVersion = '2.11.11'
scalaLibVersion = '2.11.11'
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
}
}
apply plugin: 'com.github.johnrengelman.shadow'
repositories {
mavenCentral()
maven {
url "http://artifactory.info.ucl.ac.be/artifactory/libs-release"
}
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'org.scala-lang:scala-library:2.11.8'
//parsing
compile 'com.github.scopt:scopt_2.11:3.5.0'
//tweety and it's missing dependencies
compile'net.sf.tweety:tweety-full:1.8'
compile 'org.ojalgo:ojalgo:35.0.1'
// logging
compile 'ch.qos.logback:logback-classic:1.1.7'
compile 'ch.qos.logback:logback-core:1.1.7'
compile'org.slf4j:slf4j-api:1.7.21'
//compile 'org.slf4j:slf4j-simple:1.7.21'
//compile 'org.clapper:grizzled-scala_2.11:3.0.0'
compile 'org.clapper:grizzled-slf4j_2.11:1.2.0'
// JaCoP library
compile 'org.jacop:jacop:4.4.0'
//OscaR
compile 'oscar:oscar-cp_2.11:3.1.0'
//missing libraries directory
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile group: 'junit', name: 'junit', version: '4.+'
testCompile "org.scalatest:scalatest_2.11:3.0.0"
}
compileScala {
scalaCompileOptions.additionalParameters = [ '-feature' ]
}
idea {
module {
excludeDirs += file('.idea')
inheritOutputDirs = true
downloadJavadoc = true
downloadSources = true
}
}
task scalatest(dependsOn: ['testClasses'], type: JavaExec) {
main = 'org.scalatest.tools.Runner'
args = ['-R', 'build/classes/test', '-o']
classpath = sourceSets.test.runtimeClasspath
}
task wrapper(type: Wrapper) {
gradleVersion = '4.2' //version required
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
与IntelliJ相同 - 它不再执行测试。 查看gradle依赖项的输出向我指出了这个
+--- net.sf.tweety:action:1.9
| | +--- net.sf.tweety:commons:1.9
| | | +--- ch.qos.logback:logback-core:0.9.30 -> 1.1.7
| | | +--- ch.qos.logback:logback-classic:0.9.30 -> 1.1.7
| | | | +--- ch.qos.logback:logback-core:1.1.7
| | | | \--- org.slf4j:slf4j-api:1.7.20 -> 1.7.21
| | | \--- org.slf4j:log4j-over-slf4j:1.6.3
| | | \--- org.slf4j:slf4j-api:1.6.3 -> 1.7.21
| | +--- net.sf.tweety.logics:fol:1.9
| | | +--- net.sf.tweety.logics:commons:1.9
| | | | +--- net.sf.tweety:commons:1.9 (*)
| | | | \--- net.sf.tweety:math:1.9
| | | | +--- net.sf.tweety:commons:1.9 (*)
| | | | +--- org.apache.commons:commons-math:2.1
| | | | +--- org.apache.commons:commons-math3:3.2
| | | | +--- gov.nist.math:jama:1.0.3
| | | | +--- org.slf4j:log4j-over-slf4j:1.6.3 (*)
| | | | +--- org.ojalgo:ojalgo:35.0 -> 35.0.1
| | | | \--- com.dbtsai.lbfgs:lbfgs:0.1
| | | | \--- org.scala-lang:scala-library:2.10.3 -> 2.11.11
但似乎依赖已经取代了旧的scala库版本。