从Java调用scala库时获取NoSuchMethodError

从Java调用scala库时获取NoSuchMethodError,scala,nosuchmethoderror,scala-java-interop,Scala,Nosuchmethoderror,Scala Java Interop,在用Scala编写的库中,我定义了一个类 class RouterRule(val rule: String) {} 当我从scala(在同一个库中或从另一个scala项目中)调用它时,它工作正常,但在另一个项目中从Java调用它时,它出现了NoSuchMethodError: aa$ java -classpath '*' org.jinou.http.SimpleHttpJava Exception in thread "main" java.lang.NoSuchMethodError:

在用Scala编写的库中,我定义了一个类

class RouterRule(val rule: String) {}
当我从scala(在同一个库中或从另一个scala项目中)调用它时,它工作正常,但在另一个项目中从Java调用它时,它出现了NoSuchMethodError:

aa$ java -classpath '*' org.jinou.http.SimpleHttpJava
Exception in thread "main" java.lang.NoSuchMethodError: org.jinou.http.RouterRule.<init>(Ljava/lang/String;)V
    at org.jinou.http.MySimpleHandler$$anonfun$org$jinou$http$MySimpleHandler$$getHttpHandlerMethods$3.apply(SimpleHttpServer.scala:98)
    at org.jinou.http.MySimpleHandler$$anonfun$org$jinou$http$MySimpleHandler$$getHttpHandlerMethods$3.apply(SimpleHttpServer.scala:96)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
这两个项目都是由maven构建的。 Scala版本2.9.1,Java:1.6.0_51

这是一个编译器错误吗

[更新]:发现问题:另一个库中存在具有不同构造函数的同一类RouterRule。Java运行时使用了错误的类。在我删除该类之后,它就工作了。

您是否可以在类路径中添加另一个(可能是更旧的)版本的.jar,该版本包含不同的
RouterRule
实现?Java从左到右扫描类路径,并使用它找到的第一个实现。尝试运行`javap-classpath“*”org.jinou.http.RouterRule。
javap -classpath simple-http-1.0.jar org.jinou.http.RouterRule
Compiled from "RouterRule.scala"
public class org.jinou.http.RouterRule extends java.lang.Object implements scala.ScalaObject{
     public static final scala.collection.Seq convert(scala.collection.Seq);
     public static final scala.Option check(scala.collection.Seq, java.lang.String);
     public static final scala.util.matching.Regex dynamic();
     public java.lang.String rule();
     public scala.Option checkUrl(java.lang.String);
     public org.jinou.http.RouterRule(java.lang.String);
}