java - 执行 war 时加载主类失败

标签 java maven jar war

我使用 maven 构建我的项目并生成一个具有以下内容结构的 *.war 文件:

META-INF
- maven
-- net.avedo.spozz
--- Spozz-Webservice
---- pom.properties
---- pom.xml
- MANIFEST.MF
WEB-INF
- classes
-- net
--- avedo
---- spozz
----- Spozz.class
----- models
------ ...
----- services
------ ...
-- psql-custom.properties
- lib
-- ...
- web.xml

如果我现在尝试使用 java -jar spozz.war 运行生成的 war 文件,我会收到以下错误:

Error: Could not find or load main class net.avedo.spozz.Spozz

我做错了什么?请在下面的 pom.xml 中找到 Manifest 文件和 maven-war-plugin 的定义。

MANIFEST.MF

Manifest-Version: 1.0
Built-By: awilhelm
Build-Jdk: 1.7.0_51
Class-Path: javax.servlet-api-3.1.0.jar jetty-webapp-9.1.3.v20140225.j
 ar jetty-xml-9.1.3.v20140225.jar jetty-servlet-9.1.3.v20140225.jar je
 tty-security-9.1.3.v20140225.jar jetty-server-9.1.3.v20140225.jar jet
 ty-servlets-9.1.3.v20140225.jar jetty-continuation-9.1.3.v20140225.ja
 r jetty-http-9.1.3.v20140225.jar jetty-io-9.1.3.v20140225.jar jetty-j
 sp-9.1.3.v20140225.jar jetty-schemas-3.1.M0.jar javax.servlet.jsp-api
 -2.3.1.jar javax.servlet.jsp-2.3.2.jar javax.servlet.jsp.jstl-1.2.0.v
 201105211821.jar javax.servlet.jsp.jstl-1.2.2.jar javax.el-3.0.0.jar 
 org.eclipse.jdt.core-3.8.2.v20130121.jar jetty-util-9.1.3.v20140225.j
 ar jettison-1.3.5.jar stax-api-1.0.1.jar resteasy-jaxrs-3.0.6.Final.j
 ar scannotation-1.0.3.jar javassist-3.12.1.GA.jar jboss-annotations-a
 pi_1.1_spec-1.0.1.Final.jar activation-1.1.jar jcip-annotations-1.0.j
 ar resteasy-client-3.0.6.Final.jar async-http-servlet-3.0-3.0.6.Final
 .jar jaxrs-api-3.0.6.Final.jar resteasy-servlet-initializer-3.0.6.Fin
 al.jar log4j-1.2.17.jar slf4j-api-1.7.6.jar slf4j-log4j12-1.7.6.jar c
 ommons-io-2.4.jar ormlite-jdbc-4.48.jar ormlite-core-4.48.jar
Created-By: Apache Maven 3.2.1
Main-Class: net.avedo.spozz.Spozz
Archiver-Version: Plexus Archiver

从 pom.xml 中提取

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>${maven.war.plugin.version}</version>
    <configuration>
        <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>net.avedo.spozz.Spozz</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

最佳答案

我知道将 .war 文件作为 Web 应用程序启动的最简单方法是使用 Jetty Runner。 :

  1. 下载jetty-runner.jar
  2. 运行 java -jar jetty-runner.jar spozz.war
  3. localhost:8080 访问您的 Web 应用程序

关于java - 执行 war 时加载主类失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442123/

相关文章:

java - XMPP 无法设置监听器

java 。将字符串附加到文件,以奇怪的输出结束

java - flyway:migrate 不创建表

maven - Dockerfile Maven 插件不起作用

Java 读取可运行 JAR 文件中的文本文件错误

java - 如何在 `gradle.build`中强制使用版本的特定jar?

java - IntelliJ Maven Selenium 构建 jar

java - 获取文件使用相对路径播放框架 2.2 java

java - 如何用Java读取Excel的输入?

xml - 为什么 eclipse 项目源目录中的 xml 文件没有复制到 target/classes 目录?