如何解决“错误:错误的符号引用"?使用maven-scala插件的依赖关系? [英] How do I resolve "error: bad symbolic reference" for dependencies using maven-scala plugin?

查看:535
本文介绍了如何解决“错误:错误的符号引用"?使用maven-scala插件的依赖关系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Scala和Slick构建一个小型数据库查询实用程序,并将Maven作为构建和打包工具.

I'm building a small database query utility using Scala and Slick, with Maven as my build and packaging tool.

我的代码可以编译,没有任何语法错误,但是构建失败:

My code compiles without any syntax errors, but the build fails with this:

[INFO] --- maven-scala-plugin:2.15.0:compile (default) @ origdups ---
[INFO] Checking for multiple versions of scala
[INFO] includes = [**/*.scala,**/*.java,]
[INFO] excludes = []
[INFO] /home/lreeder/dev/scala/origdups/src/main/scala:-1: info: compiling
[INFO] Compiling 4 source files to /home/lreeder/dev/scala/origdups/target/classes at 1375638972068
[INFO] No known dependencies. Compiling everything
[ERROR] error: bad symbolic reference. A signature in Mapper.class refers to term runtime
[INFO] in package scala.reflect which is not available.
[INFO] It may be completely missing from the current classpath, or the version on
[INFO] the classpath might be incompatible with the version used when compiling Mapper.class.
(several more similar errors)

请注意,Mapper类不是我的代码.我认为这是Slick的一部分吗?我正在将Scala 2.10.1用于maven-scala插件:

Note that the Mapper class is not my code. I think it's part of Slick? I'm using Scala 2.10.1 for the maven-scala plugin:

<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-library</artifactId>
  <version>2.10.1</version>
</dependency>

和Slick 2.10(当前使用Scala 2.10.1构建):

and Slick 2.10 (currently build with Scala 2.10.1):

<dependency>
   <groupId>com.typesafe.slick</groupId>
   <artifactId>slick_2.10</artifactId>
   <version>1.0.1</version>
</dependency>

我已在启用maven调试的情况下进行了编译,而这是产生上述错误的Java调用.

I've compiled with maven debug turned on, and this is the Java call that generates the errors above.

/usr/local/jdk1.7.0_21/jre/bin/java -classpath /home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1. jar:/home/lreeder/.m2/repository/org/scala-tools/maven-scala-plugin/2.15.0/maven-scala-plugin-2.15.0.jar -Xbootclasspath/a:/home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar org_scala_tools_maven_executions.MainWithArgsInFile scala.tools.nsc.Main/tmp/scala-maven-6314934214401019063.args

/usr/local/jdk1.7.0_21/jre/bin/java -classpath /home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-tools/maven-scala-plugin/2.15.0/maven-scala-plugin-2.15.0.jar -Xbootclasspath/a:/home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar org_scala_tools_maven_executions.MainWithArgsInFile scala.tools.nsc.Main /tmp/scala-maven-6314934214401019063.args

我在这里想念什么?要消除这些错误,需要在maven-scala插件配置中进行设置.

What am I missing here? What needs to be set in the maven-scala plugin configuration to get rid of these errors.

推荐答案

此错误:

error: bad symbolic reference. A signature in Mapper.class refers to term runtime in package scala.reflect which is not available.

表示类路径中缺少scala.reflect.runtime.而且,确实,在检查/tmp/scala-maven-6314934214401019063.args时,它不在此处列出的类路径中.

is saying that scala.reflect.runtime is missing from the classpath. And, indeed, upon checking /tmp/scala-maven-6314934214401019063.args, it was not in the classpaths listed there.

Slick 2.10依赖于Scala反射包.参见 https://github. com/slick/slick/blob/master/src/main/scala/scala/slick/direct/MetadataProvider.scala .因此,用于Slick的POM应该列出scala-reflect,以便其他项目可以将其解析为传递依赖项.但是,slick_2.10-1.0.1.pom不会列出scala-reflect.

Slick 2.10 has dependencies on the Scala reflection package. See https://github.com/slick/slick/blob/master/src/main/scala/scala/slick/direct/MetadataProvider.scala. So, the POM for Slick should list scala-reflect so that other projects can resolve it as a transitive dependency. However, slick_2.10-1.0.1.pom does not list scala-reflect.

在我自己的项目POM中将scala-reflect添加为依赖项,即可解决此问题.

Adding scala-reflect as a dependency in my own project POM fixed this.

这篇关于如何解决“错误:错误的符号引用"?使用maven-scala插件的依赖关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆