【发布时间】:2011-12-13 17:24:12
【问题描述】:
我有一个类,我认为它在引用外部库文件时存在一些依赖性问题。每次我尝试在服务器上运行它时,我都会收到错误提示找不到类。比如这样:
严重:找不到类 [ org/json/JSONException ]。加载 [class com.myproj.logic.Driver] 时出错
这会阻止类执行。我尝试通过说“抛出异常”来取出特定的抛出执行并得到以下错误:
警告:在调用 EJB 驱动程序方法时发生系统异常 public void com..logic.Driver.initURL() throws java.lang.Exception javax.ejb.EJBException: javax.ejb.CreateException: Singleton Driver 初始化失败
原因:java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils
@Singleton
public class Driver {
@EJB RSSbean rssbean;
@PostConstruct
@Schedule(hour ="*/1", minute ="*/1", second ="*/1", persistent = false)
public void initURL() throws IOException, JSONException{
URL twitterSource = new URL("http://search.twitter.com/search.json?q=news");
ByteArrayOutputStream urlOutputStream = new ByteArrayOutputStream();
IOUtils.copy(twitterSource.openStream(), urlOutputStream);
String urlContents = urlOutputStream.toString();
JSONObject thisobject = new JSONObject(urlContents);
JSONArray names = thisobject.names();
JSONArray asArray = thisobject.toJSONArray(names);
JSONArray resultsArray = thisobject.getJSONArray("results");
JSONObject jsonObject = resultsArray.getJSONObject(0);
String twitterText = jsonObject.getString("text");
//System.out.println(twitterText);
System.out.println("Calling rssbean from Driver");
rssbean.updateDatabase("twitterText");
}
}
我已经编辑了 Java 类路径并为每个类添加了一个用户库,并编辑了项目的构建路径。这些库显示在列表中,并且我没有收到编译器错误,因此至少 Eclipse 已经识别了这些库。问题出现在执行期间,所以我认为那里有问题。
我应该在 Windows>Preferences>Java>Classpath> 中编辑类路径并在那里添加罐子吗?我以前不必为任何其他图书馆这样做。
【问题讨论】:
-
编译和执行类路径不同。你如何启动应用程序?你的运行时类路径中是否列出了缺少的库?
-
我在 glassfish 3.1 中运行它。我认为我的构建路径很好,它必须是类路径。我如何检查以确保它们在那里?如果我转到 windows > 首选项 > Java > 构建路径 > 类路径> 那里只有 JRE 库文件。
-
我认为您应该将包含缺少的 com.myproj.logic.Driver 类的 jar 添加到您的 webapp 的 WEB-INF/lib 目录中,以便可以在运行时使用(和找到)它。或者,如果它不是 jar 而是单个类,则将其添加到 WEB-INF/classes 目录。在任何一种情况下,重新部署您的应用程序并使用添加的新 jar 或类进行测试。
-
嗯,不。 Java webapp 的所有 runtime 依赖项,无论它部署在哪个服务器上,都必须放在 WEB-INF/lib 目录中的 jars 中,或者作为 WEB-INF/classes 中的简单类目录。而且这个运行时类路径与你在 IDE 中设置的构建路径无关。
-
另外,我假设 org.json.JSONException 类来自一些开源 Java/json 库(如 Jackson - jackson.codehaus.org)。如果是这种情况,我建议将完整的库 jar 放在运行时类路径中,而不仅仅是 missong org.json.JSONException 类。
标签: java eclipse jakarta-ee