2014-10-30 180 views
0

获取以下错误。问题是,当我们重新启动服务器时,它会间歇性地发生。有时会出现错误,有时候不会。如何解决这个问题?我正在使用maven。java.lang.NoSuchMethodError:org.hsqldb.DatabaseURL.parseURL maven runtime

java.lang.NoSuchMethodError: org.hsqldb.DatabaseURL.parseURL(Ljava/lang/String;ZZ)Lorg/hsqldb/persist/HsqlProperties; 
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoSuchMethodError: org.hsqldb.DatabaseURL.parseURL(Ljava/lang/String;ZZ)Lorg/hsqldb/persist/HsqlProperties; 

编辑:它不工作。旧版本来自hadoop-client:2.0.0-mr1-cdh4.2.0。我从此排除了hsqldb并在依赖关系树中进行了检查,并且旧版本没有显示出来。但是我仍然在运行时遇到错误。

回答

1

你几乎肯定有一个依赖不匹配。

确保您知道您希望使用哪个版本的hsqldb。

查看应用程序正在使用的依赖项的列表,我的意思是构建应用程序中的实际JAR文件,而不是Maven依赖项列表。

很可能你有hsqldb jar或多个不同版本的错误版本(即正确的版本和错误的版本)。

这可以通过意想不到的传递依赖造成的拉进

,以标识传递依赖的来源,你可以使用maven依赖性:树目标:

例如

mvn dependency:tree -Dverbose -Dincludes=hsqldb 

其中hsqldb是您正在寻找的工件的名称。

http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

Oncer你已经确定了多个版本的来源,你可以从这些依赖关系排除,如:

<dependency> 
    <groupId>sample.ProjectA</groupId> 
    <artifactId>Project-A</artifactId> 
    <version>1.0</version> 
    <scope>compile</scope> 
    <exclusions> 
    <exclusion> <!-- declare the exclusion here --> 
     <groupId>sample.ProjectB</groupId> 
     <artifactId>Project-B</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

更多细节在这里:http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

+0

我该如何强制使用特定版本的hsqldb?我已经看到,两个罐子来自许多依赖。如何解决它,因为它来自很多来源 – dejavu 2014-10-30 12:54:03

+0

我已经扩大了答案,首先你需要确定它来自哪里,然后你需要排除你不想要的。 – cowls 2014-10-30 12:58:28

+0

已经做到了。它来自多个地方。我可以在顶部pom.xml中做些什么来限制只有一个库 – dejavu 2014-10-30 13:05:16

0

我有同样的错误,并且是 我能够使用gt-epsg-wkt而不是hsql来使用它。

<dependency> 
    <groupId>org.geotools</groupId> 
    <artifactId>gt-epsg-wkt</artifactId> 
    <version>${geotools.version}</version> 
</dependency>