【问题标题】:Java class not found errors while runningJava 类在运行时未找到错误
【发布时间】: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


【解决方案1】:

我发现您必须在 Glassfish/domain/lib 目录中添加任何库文件,然后它们才能被服务器上的 glassfish 识别。

【讨论】:

  • 讨厌回答我自己的问题,但根据我使用的关键字,这并没有为我提供支持。
  • 或者,在我的情况下 /WEB-INF/lib/ 需要 jettison.jar
猜你喜欢
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多