【问题标题】:java.lang.NoClassDefFoundError: org/eclipse/jetty/server/nio/SelectChannelConnector using com.j256.simplejmx.web.JmxWebServerjava.lang.NoClassDefFoundError: org/eclipse/jetty/server/nio/SelectChannelConnector 使用 com.j256.simplejmx.web.JmxWebServer
【发布时间】:2014-04-09 13:57:52
【问题描述】:

我正在尝试使用 com.j256.simplejmx 实现简单的 JMX 客户端/服务器。我想使用 Web 浏览器监视我的对象。我复制了一段非常简单的代码:

package com.my.package.jmx;

import com.j256.simplejmx.web.JmxWebServer;

public class JMXServer {

    public static void main(String[] args) throws Exception  {

        JmxWebServer jmxWebServer = new JmxWebServer(8123);
        jmxWebServer.start();
    }

}

当我运行它时,我遇到了一个异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/thread/ThreadPool
    at com.my.package.jmx.JMXServer.main(JMXServer.java:9)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.thread.ThreadPool
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

我将此添加到我的pom.xml

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>9.1.3.v20140225</version>
</dependency>

我再次运行它,我得到了另一个异常:

ception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/AbstractConnector
    at com.my.package.jmx.JMXServer.main(JMXServer.java:9)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.AbstractConnector
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more 

所以我再次更新我的 pom.xml:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.1.3.v20140225</version>
</dependency>

它又给了我一个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/nio/SelectChannelConnector
    at com.mu.package.jmx.JMXServer.main(JMXServer.java:9)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.nio.SelectChannelConnector
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

我找不到任何解决方案。我还应该在我的pom.xml 文件中添加什么?可能是依赖版本的问题?

提前谢谢你。


我编辑了我的 pom.xml

<project...> 

    <properties>
        <jetty-version>8.1.9.v20130131</jetty-version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.j256.simplejmx</groupId>
            <artifactId>simplejmx</artifactId>
            <version>1.8</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>${jetty-version}</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty-version}</version>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

现在,我可以运行这个服务器了:

INFO  Server - jetty-8.1.9.v20130131
INFO  AbstractConnector - Started SelectChannelConnector@0.0.0.0:8123

但是当我打开我的网络浏览器并输入:

localhost:8123

抛出异常:

WARN  nio - 
java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(Unknown Source)
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.jetty.server.AbstractHttpConnection.<init>(AbstractHttpConnection.java:157)
    at org.eclipse.jetty.server.AsyncHttpConnection.<init>(AsyncHttpConnection.java:50)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.newConnection(SelectChannelConnector.java:285)
    at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newConnection(SelectChannelConnector.java:325)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.newEndPoint(SelectChannelConnector.java:272)
    at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newEndPoint(SelectChannelConnector.java:331)
    at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.createEndPoint(SelectorManager.java:841)
    at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:496)
    at org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:290)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 感谢您的编辑@Gray。我无法使用这个标签... EDIT 哎呀,你刚刚添加了它。好主意;)
  • 请问您是如何发现 simplejmx 进行 JMX/HTTP 发布的?
  • 当然 :) 几天前,我问了一个关于 JMX 的问题 stackoverflow.com/q/22789428/1021970 - 你回答了。我决定在我的项目中使用simplejmx。我阅读了您在答案中提供的所有链接,这里 256.com/sources/simplejmxExpose JMX Beans Over HTTP for Web Browsers 部分
  • 酷,感谢您的信息。

标签: java jmx noclassdeffounderror simplejmx


【解决方案1】:

原因:java.lang.ClassNotFoundException: org.eclipse.jetty.server.nio.SelectChannelConnector

所以现在SimpleJMX 有一个可选的 8.1.9.v20130131 Jetty 依赖项来支持publishing JMX over web/HTTP。如果您查看 pom.xml,您会看到:

<jetty-version>8.1.9.v20130131</jetty-version>
...
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>${jetty-version}</version>
    <optional>true</optional>
</dependency>

你可以试试这个版本的 Jetty 吗?我不确定是否有办法同时支持 8.X.X 和 9.X.X,但我会研究一下。

【讨论】:

  • 好的,它有点帮助,但是现在,当我运行我的服务器并尝试通过 Web 浏览器访问它时,它会引发异常。我编辑了我的帖子。
  • 是的,改变问题不是一个好主意。很难保持有效的答案@GirlyGirl。我认为现在您的代码中同一类的不同版本存在问题。 stackoverflow.com/questions/19090127/…
  • 仅供参考:javax.servlet.AsyncContext 位于 javax.servlet 包中,因此您将获得不同版本的 @GirlyGirl。
  • 好的@Gray,它修复了它。我删除了一个依赖项:javax.servlet。非常感谢你。我将与您的simplejmx 合作,我希望它很快就会正常工作;)
  • 如有任何问题/cmets请联系我@GirlyGirl 256.com/gray/email
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
相关资源
最近更新 更多