【问题标题】:ClassNotFoundException - How to use external libraries without maven?ClassNotFoundException - 如何在没有 maven 的情况下使用外部库?
【发布时间】:2018-07-29 20:05:17
【问题描述】:

由于我之前的问题,我按照以下步骤在没有 maven 的情况下包含 Apache PDFbox:

  1. download site of PDFbox 下载的.jars(都在每个子项目的库下)
  2. maven repository(commons-logging 和 fontbox,但 fontbox 已包含在步骤 1 中)的 PDFbox 依赖项中下载了 .jars
  3. 将下载的 .jars 放在一个文件夹中 (C:\PDFjars)
  4. 在 eclispe 中配置构建路径(将所有 .jars 添加为外部库)现在看起来像这样:

我的小服务程序:

package servlets;
// other imports    
import org.apache.pdfbox.pdmodel.PDDocument;

@WebServlet("/print")
public class PrintServlet extends HttpServlet {
    public PrintServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // From a PDFbox Tutorial

        //Creating PDF document object 
          PDDocument document = new PDDocument();    

          //Saving the document
          document.save("C:/PdfBox_Examples/my_doc.pdf");

          System.out.println("PDF created");  

          //Closing the document  
          document.close();

        doGet(request, response);
    }

}

所以当我启动我的网络项目并调用应该生成一个简单 PDF 文档的函数时,我得到以下错误:

    Servlet.service() for servlet [servlets.PrintServlet] in context with path [/StaticsCalculator] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at servlets.PrintServlet.doPost(PrintServlet.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

解决方案:我还必须复制 WEB-INF/lib 文件夹中的 .jar。

【问题讨论】:

  • 该网站上有一个“下载”部分...
  • 哪里有 HTTP 代理阻止我的 eclipse 为什么不在 eclipse 中添加代理设置?
  • 您是公司中唯一的 Java 开发人员吗?其他开发人员是做什么的? MavenCentral 被屏蔽其实并不少见,但后来我会成立一家公司 Nexus/Artifactory,为开发人员提供必要的工件。

标签: java eclipse exception import dependencies


【解决方案1】:

自行下载 jar 文件并将其添加到您的代码依赖项中。您可以在 Maven Repository 上搜索任何 Maven 文件。如果您使用的是 Eclipse,只需修改构建路径以指向外部 jar 并为其提供 jar 的位置。这将不会处理您的库所需的任何依赖项,这会导致您必须阅读 pom 并手动下载每个库的依赖地狱。

【讨论】:

    【解决方案2】:

    你可以 a) 使用本地 Maven 存储库并将依赖项放在那里。 b) 在应用程序的类路径中添加依赖项——这基本上就是 maven 为您所做的。

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多