【问题标题】:Invalid main class for MANIFEST.MF TomcatMANIFEST.MF Tomcat 的主类无效
【发布时间】:2015-12-24 05:41:32
【问题描述】:

我正在学习 servlet 和 jsps,现在我正在尝试生成我的 WAR 文件。据我所知,我需要创建一个 MANIFEST.MF 文件才能完成它。我可以使用 Intellij IDEA 生成 WAR 文件,但是一旦将其复制到 /webapps(tomcat home 的子目录)并运行 Tomcat,我就无法运行该应用程序。我在 MANIFEST.MF 中收到警告说 Invalid main class 我在其中声明了 Main-Class 属性。我这样做:Main-Class: demo.Hello

// Hello.java
package demo;
@WebServlet(name = "Hello")
public class Hello extends HttpServlet {
    public Hello() { super(); }
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         PrintWriter out = response.getWriter();
         out.println("Hello");
    }
}


// MANIFEST.MF - class path is set to where Hello.java is stored
Manifest-Version: 1.0
Class-Path: /home/.../src
Main-Class: demo.Hello

你有什么办法解决这个问题吗?

注意:Intellij IDEA 直接在 localhost:8080 上运行 Web 应用程序,即使我设置了另一个应用程序上下文。我不知道为什么。

【问题讨论】:

    标签: java tomcat intellij-idea


    【解决方案1】:

    对于 Web 应用程序,无需在 Manifest 文件中添加 Main-Class 条目。此条目是为了使您的 jar 可执行。

    【讨论】:

    • @SethMcClaine 我认为它确实提供了问题的答案,就像一小时后 EJP 的答案一样。 WAR 文件不需要主类或方法。
    • 谢谢,你是对的。现在我在部署war文件时遇到了问题。在tomcat日志中我得到这个:24-Dec-2015 11:50:00.217 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.当我去localhost:8080/Deployment我得到404错误。
    【解决方案2】:

    如果您使用 maven 构建项目,maven-war-plugin 或 maven-jar-plugin 可以为您生成清单。

    至于您的应用程序总是在http://localhost:8080 执行,我认为您需要使用@WebServlet("/somePath") 指定servlet 的路径。您提供的是名称属性而不是路径。

    如果这不是您的意思,您能告诉我们您是如何部署项目的吗?您使用的是哪个应用程序服务器?它是战争文件中的耳朵还是只是战争文件?如果它只是一个war文件,那么您应该能够在web.xml中为应用程序设置contextPath

    【讨论】:

      【解决方案3】:

      WAR 文件不需要Main-class 属性,并且demo.Hello 不是主类(没有public static void main(String[] args) 方法)。

      只需删除Main-class 属性即可。

      【讨论】:

        猜你喜欢
        • 2012-12-13
        • 2010-10-20
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 2015-04-14
        相关资源
        最近更新 更多