繁体   English   中英

MANIFEST.MF Tomcat的主类无效

[英]Invalid main class for MANIFEST.MF Tomcat

我正在学习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应用程序,即使我设置了另一个应用程序上下文。 我不知道为什么。

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

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

至于你的应用程序总是在http:// localhost:8080上执行我认为你需要用@WebServlet(“/ somePath”)指定servlet的路径。你提供了name属性而不是路径。

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

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

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

暂无
暂无

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

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