MANIFEST.MF Tomcat的主类无效

时间:2015-12-24 05:41:32

标签: java tomcat intellij-idea

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

只需删除Main-class属性。