简体   繁体   English

ClassNotFoundException - 如何在没有 Maven 的情况下使用外部库?

[英]ClassNotFoundException - How to use external libraries without maven?

As a result of my previous question I followed these steps to include Apache PDFbox without maven:由于我之前的问题,我按照以下步骤在没有 maven 的情况下包含 Apache PDFbox:

  1. downloaded .jars from download site of PDFbox (all under Libraries of each subproject)PDFbox的下载站点下载.jars(都在每个子项目的Libraries下)
  2. downloaded .jars from dependencies of PDFbox from maven repository (commons-logging and fontbox, but fontbox was already included in step 1)maven 存储库的 PDFbox 依赖项下载 .jars(commons-logging 和 fontbox,但 fontbox 已经包含在步骤 1 中)
  3. placed the downloaded .jars in a folder ( C:\\PDFjars )将下载的 .jars 放在一个文件夹中( C:\\PDFjars
  4. configured build path in eclispe (added all .jars as external libraries) It now looks like this:在 eclispe 中配置构建路径(将所有 .jars 添加为外部库)现在看起来像这样: 在此处输入图片说明

My servlet:我的 servlet:

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);
    }

}

So when I start my web project and call the function the should produce a simple PDF document, I get folloing error:因此,当我启动我的 Web 项目并调用应该生成一个简单的 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)

Solution : I had to copy the .jars in WEB-INF/lib folder as well.解决方案:我还必须复制WEB-INF/lib文件夹中的 .jars。

You can a) use a local maven repository and place the dependencies there.您可以 a) 使用本地 Maven 存储库并将依赖项放在那里。 b) add the dependencies in the classpath of the application - that's basically what maven does for you. b) 在应用程序的类路径中添加依赖项 - 这基本上是 maven 为您所做的。

Download the jar file by itself and add it to your code dependency.自行下载 jar 文件并将其添加到您的代码依赖项中。 You can search for any Maven file on Maven Repository .您可以在Maven Repository上搜索任何 Maven 文件。 If you're using Eclipse, just modify the build path to point to an external jar and give it the location of your jar.如果您使用 Eclipse,只需修改构建路径以指向外部 jar 并为其指定 jar 的位置。 This will not take care of any dependencies your library requires, which leads into dependency hell where you'll have to read the pom and download each library manually.不会处理您的库所需的任何依赖项,这会导致您必须手动读取 pom 并下载每个库的依赖项地狱。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM