Java 执行WAR文件时出错

Java 执行WAR文件时出错,java,maven,embedded-jetty,Java,Maven,Embedded Jetty,我已经使用maven插件为我的项目结构构建了一个war文件。现在当我运行这个war文件时,我得到了一个错误 Error: Could not find or load main class com.abc.HelloWorld.App 出于某种原因,当我检查war文件时,我的主类是在WEB-INF/classes/com/abc/HelloWorld/ 我曾尝试向Manifest.MF文件添加一个类路径,但没有效果 这是我的maven插件,用于创建war文件。此外,该项目还包含一个嵌入式je

我已经使用maven插件为我的项目结构构建了一个war文件。现在当我运行这个war文件时,我得到了一个错误

Error: Could not find or load main class com.abc.HelloWorld.App 
出于某种原因,当我检查war文件时,我的主类是在
WEB-INF/classes/com/abc/HelloWorld/

我曾尝试向
Manifest.MF
文件添加一个类路径,但没有效果

这是我的maven插件,用于创建war文件。此外,该项目还包含一个嵌入式jetty服务器

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <configuration>
  <webXml>WebContent\WEB-INF\web.xml</webXml>
    <warName>${project.artifactId}-${project.version}</warName>              
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <mainClass>com.infor.HelloWorld.App</mainClass>
      </manifest>
    </archive>
    <overlays>
    <overlay>
     <id>com.abc.HelloWorld</id>    
     <type>jar</type>
    </overlay>
    </overlays>
  </configuration>
  <executions>
    <execution>
      <id>default-war</id>
      <phase>package</phase>
      <goals>
        <goal>war</goal>
      </goals>
    </execution>
  </executions>
</plugin>


WebApp WAR文件是一种专门的jar文件,打包后可用于部署Web容器

您可以拥有一个自动执行的war文件,但最终您将拥有一个覆盖了JAR行为的war文件,以便
META-INF/MANIFEST.MF
及其
主类可以实例化Jetty,然后将webapp本身加载到该服务器实例中

看一下码头项目维护的以下项目

在以下情况下,务必小心:

  • 将服务器类合并到WAR文件中以避免webapp部署失败(对于服务器类路径和webapp类路径之间的重叠类)
  • 合并
    META-INF/services/
    文件
  • 不要向HTTP客户机公开太多的自执行文件的
    服务器
    端(不要让他们下载任何敏感的东西!)-这可以通过将此启动的服务器部分放在
    /WEB-INF/
    目录中来实现
  • 您不想让webapp(war)启动运行并了解服务器组件(这可能会导致双重初始化,一次在服务器类加载器中,一次在webapp类加载器中)
如该项目所述:

该项目应该为那些从自执行WAR文件的角度研究嵌入式Jetty的使用的人提供一个基线

该项目有4个主要部分:

  • /thewebapp/
    -这是WAR文件,webapp以其本机格式存在,带有普通的maven
    WAR
    和一个生成的工件,它只是一个不(尚未)自动执行的WAR文件
  • /theserver/
    -这是嵌入式Jetty服务器
    Jetty.livewar.ServerMain.main(字符串args[])
    ,您可以自定义它来初始化Jetty服务器及其Web应用程序。这个项目也是您自定义JDBC服务器库、JNDI、日志等内容的地方。这个项目生成一个uber jar,其中包含运行服务器所需的所有依赖项。使用
    maven shade插件
    合并
    META-INF/services/
    文件时要特别小心
  • /server bootstrap/
    -这包含两个小类,它们从live WAR中的内容设置一个
    LiveWarClassLoader
    ,然后从这个新的ClassLoader运行
    jetty.livewar.ServerMain.main(字符串args[])
    。该项目还包含live WAR需要/使用的live
    META-INF/MANIFEST.MF
  • /livewar assembly/
    -此项目将上述3个项目连接到一个活动/可执行的WAR文件中。来自上述3个项目的工件由
    maven汇编插件
    解包,并放置在最具功能(和安全)的地方。例如,
    /theserver/
    中的服务器类被放置在
    /WEB-INF/jetty server/
    中,以使访问WAR文件的WEB客户端无法访问它们
注意:新组装的WAR文件中有3个文件,您应该知道,如果使用此设置,这些文件可以由Web客户端作为静态内容下载

  • /jetty/bootstrap/JettyBootstrap.class
  • /jetty/bootstrap/LiveWarClassLoader.class
  • /META-INF/MANIFEST.MF
示例项目的设置方式应确保这些引导文件中的信息不会泄露有关服务器或其操作的私人或敏感信息。仅仅是Webapp可以作为一个实时/可执行的WAR文件启动