2
String pathToJar = "C:\\Users\\dtn\\jb_workspace\\helloworld-mdb\\target\\jboss-as-helloworld-mdb.war";

URL[] urls = { new URL("jar:file:///" + pathToJar+"!/") };
URLClassLoader urlcl = new URLClassLoader(urls);
urlcl.loadClass("org.jboss.as.quickstarts.mdb.HelloWorldTopicMDB");

我得到的例外是:

Exception in thread "main" java.lang.ClassNotFoundException: org.jboss.as.quickstarts.mdb.HelloWorldTopicMDB

当我调查这个问题时,我看到HelloWorldTopicMDB.class文件存储在 WEB-INF/classes 中。

这能以某种方式解决问题的根源吗?由于我尝试使用其他 jar 文件,包名位于 jar 目录结构的根目录,因此没有错误。

非常感谢您的回复。

4

1 回答 1

2

在合适的war文件中,编译的类总是在WEB-INF/classes中,运行时需要的jars在WEB-INF/lib中。

这绝对是你的问题的原因。该资源应该可以帮助您从 war 文件中加载类。

我必须说,虽然这看起来相当不正统。通常 Web 服务器从 war 文件中加载类。我能问一下你为什么这样做吗?

无论如何,希望这会有所帮助。

于 2013-10-06T05:22:50.433 回答