Java应用程序无处可去 - 我是否有版本控制问题?

时间:2017-01-09 10:19:18

标签: java maven tomcat

我在Java应用程序中使用以下非常简单的代码,我在Tomcat 7和OpenJDK Java 1.7下运行

List<AnnotationNode> children = parent.getChildren();

LOGGER.debug("sorting ...");

children.sort(new Comparator<AnnotationNode>() {
    @Override
    public int compare(AnnotationNode o1, AnnotationNode o2) {

        int result;
        try {
            Annotation a1 = o1.getAnnotation();
            Annotation a2 = o2.getAnnotation();             
            LOGGER.debug("compare ..");
            result  = a1.getStart() - a2.getStart();
        } catch(Exception e) {
            LOGGER.debug("huh??", e);
            result =0;
        }

        return result;
    }           
});

请原谅那些LOGGER消息,但这是我追踪问题根源的唯一方法。当我执行GET请求时,程序只是进入无人区并且请求被吞没。

我已经在调试模式下启动了Tomcat,以便从我的Eclipse远程调试应用程序。结果是它达到.sort()但它永远不会达到我compare()的实现。所以我收到的最后一条调试消息是sorting ...,那就是它。

我正在部署它的机器安装了Java 8

openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2ubuntu0.16.04.2-b14)
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)

但是为Java 7设置了父pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <!-- etc. -->
    </plugins>
</build>

这看起来我在这里遇到了Java版本的问题,虽然我不确定这个问题出在哪里。我的应用程序是否可能使用错误的编译器构建?

知道如何解决这个问题吗?

更新

/var/log/tomcat7/catalina.out中的最后一条消息说:

SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NoSuchMethodError: java.util.List.sort(Ljava/util/Comparator;)V
    at at.company.enrichment.processor.AnnotatedDocumentTree.addNode(AnnotatedDocumentTree.java:104)
    at at.company.enrichment.processor.AnnotatedDocumentTree.initialize(AnnotatedDocumentTree.java:70)
    at at.company.enrichment.processor.AnnotatedDocumentTree.<init>(AnnotatedDocumentTree.java:41)
    at at.company.enrichment.processor.DocumentProcessor2.process(DocumentProcessor2.java:112)

为什么我在此处获得NoSuchMethodError例外?

2 个答案:

答案 0 :(得分:1)

{8}中的List#sort(Comparator)方法是新的。如果您的Tomcat使用Java 7,它将找不到该方法。您可以做的是使用Java 7和Java 8中存在的Java 7版本Collections#sort(Collection, Comparator)

一般来说,最好使用您打算运行它的相同Java版本编译代码。在这种情况下,编译器将为您提供错误,而不是运行时。

答案 1 :(得分:0)

在tomcat上部署Web应用程序时,我的猜测是缺少对您正在使用的库的依赖(您使用的是ASM吗?)。

更准确地说,我需要查看tomcat的完整日志和类的导入。