首先要考慮到JDK11和scala的兼容性,根據實際情況選擇需要的scala版本
問題 01
Detect muti scala-library version
原因
同一個依賴有多個版本,maven不知道選擇哪個
解決方案
- 同一依賴maven會根據路徑最短原則選擇依賴,依賴路徑相同會根據聲明優先選擇
可以根據這個特性,使想要用的版本被選擇 - Dependency_Management是一個更好的選擇,如果在dependency_Management中指定只能用某個版本,maven只會選擇這個版本
DependencyManagement官方介紹
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala-library.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
問題02
error: object parsing is not a member of package util
原因
因爲 scala-parser-combinators 依賴在2.11中被移除了,必須自己添加
解決方案
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-parser-combinators_2.13</artifactId>
<version>1.1.2</version>
</dependency>
問題03
[ERROR] (class java.lang.RuntimeException/error reading Scala signature of JSON.class: Scala signature JSON has wrong version
原因
因爲 scala-parser-combinators 的版本太高了
解決方案
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-parser-combinators_2.12</artifactId>
<version>1.1.0</version>
</dependency>
問題04
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread “main” java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
at java.base/java.lang.Class.getField(Class.java:2000)
原因
因爲jacoco-maven-plugin插件只支持到JAVA9
解決方案
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.4</version>
</plugin>
問題05
Exception in thread “ScalaTest-main” java.lang.NoClassDefFoundError: org/scalacheck/Test.runOptionallyWithPassFailReporter(Runner.scala:919)
at org.scalatest.tools.RunnerTestCallback
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 3 more
原因
缺少scalacheck_2.13依賴
解決方案
<dependency>
<groupId>org.scalacheck</groupId>
<artifactId>scalacheck_2.13</artifactId>
<version>1.14.0</version>
<scope>test</scope>
</dependency>
問題06
error: object parsing is not a member of package util
原因
因爲 scala-parser-combinators 依賴在2.11中被移除了,如果需要必須自己添加
解決方案
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-parser-combinators_2.13</artifactId>
<version>1.1.2</version>
</dependency>
問題07
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20:integration-test (integration-test) on project commons-ui-expweb: Execution integration-test of goal o
rg.apache.maven.plugins:maven-failsafe-plugin:2.20:integration-test failed: A required class was missing while executing org.apache.maven.plugins:maven-failsafe-plugin:2.20:integration-
test: javax/xml/bind/JAXBException
原因
maven-failsafe-plugin版本太低,與scala不能很好兼容
解決方案
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Tips:查看依賴
mvn dependency:tree