Java 如何为tomcat配置maven war插件

Java 如何为tomcat配置maven war插件,java,spring,tomcat,pom.xml,maven-war-plugin,Java,Spring,Tomcat,Pom.xml,Maven War Plugin,我无法为Tomcat生成正确的WAR文件 我正在使用MAVEN 3.6.1、Java12.0.1和IDEEclipse。当我在eclipse中运行我的应用程序(RunAs>SpringBootApp)时,它工作正常,但问题是当我在生成WAR文件后尝试运行它时 我正在做java-jar.war,我得到了: Error: Could not find or load main class com.blw.linemanager.Application Caused by: java.lang.Cla

我无法为Tomcat生成正确的WAR文件

我正在使用MAVEN 3.6.1、Java12.0.1和IDEEclipse。当我在eclipse中运行我的应用程序(RunAs>SpringBootApp)时,它工作正常,但问题是当我在生成WAR文件后尝试运行它时

我正在做java-jar.war,我得到了:

Error: Could not find or load main class com.blw.linemanager.Application
Caused by: java.lang.ClassNotFoundException: com.blw.linemanager.Application
我在谷歌上搜索和阅读stackoverflow,因为我找到了很多关于它的帖子,但仍然无法运行它。我做错了什么

经过一番阅读,我发现我有一些如何配置maven war插件的方法(我说的对吗?),在pom中我做了一些更改,但没有帮助


4.0.0
bwl
线路经理
战争
0.0.1-快照
org.springframework.boot
spring启动程序父级
1.5.8.1发布
org.springframework.boot
spring启动依赖项
2.1.3.1发布
聚甲醛
进口
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
com.jayway.jsonpath
json路径
com.microsoft.sqlserver
mssql jdbc
公地郎
公地郎
2.1
org.codehaus.plexus
尾丛
1.1
org.springframework.boot
弹簧启动机tomcat
假如
com.blw.linemanager.Application
12
12
线路经理
${project.build.directory}
org.springframework.boot
springbootmaven插件
org.apache.maven.plugins
maven编译器插件
12
org.apache.maven.plugins
maven资源插件
复制资源
验证
复制资源
${project.build.directory}/META-INF
${basedir}/src/main/resources/META-INF
org.apache.maven.plugins
maven战争插件
错误的
${project.build.directory}/WEB-INF/classes
符合事实的
com.blw.linemanager.Application
${project.build.directory}/META-INF/MANIFEST.MF
另外,因为一开始我得到了错误“no main manifest attribute”,我添加了它,现在看起来是这样的

Manifest-Version: 1.0
Created-By: Apache Maven ${maven.version}
Build-Jdk: ${java.version}
我的思维方式错了吗?我应该能够以java-jar.war的形式运行.war文件,还是这是错误的理解

@springboot应用程序
公共类应用程序扩展org.springframework.boot.web.support.SpringBootServletInitializer{
公共静态void main(字符串[]args){
SpringApplication app=新的SpringApplication(Application.class);
应用程序运行(args);
}
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder){
返回生成器.sources(Application.class);
}
}

添加包装类型,并在pom.xml中添加版本详细信息,如

<packaging>jar</packaging>
jar

战争
然后,附加build标记来定义jar/war-like的名称

<build>
    <finalName>YOUR-APP_NAME</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

您的应用程序名称
org.springframework.boot
springbootmaven插件
然后,使用目标运行应用程序

清洁包装

在目标文件夹中创建jar/war

将war文件重命名为ROOT,类似于ROOT.war


复制tomcat webapps文件夹中创建的jar/war并启动tomcat的最后一步。

最好从中获得一个工作的spring启动应用程序,以避免版本冲突等。 对于
war
-文件部署(例如,部署到本地tomcat中),应用程序必须扩展
SpringBootServletInitializer

    @SpringBootApplication
    public class SpringBootTomcatApplication extends SpringBootServletInitializer {
      public static void main(String[] args) {
        SpringApplication.run(SpringBootTomcatApplication.class, args);
      }

      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringBootTomcatApplication.class);
      }
    }
将您的
pom
包装更改为
war

<packaging>war</packaging>
是的,您不需要
maven-war插件
。出于测试目的,让我们用
@RestController
注释我们的应用程序,并介绍一个简单的端点:

    @RestController
    @SpringBootApplication
    public class SpringBootTomcatApplication extends SpringBootServletInitializer {
    ...
      @RequestMapping(value = "/")
      public String hello() {
        return "Hello World from Tomcat";
      }
    }
本地终端
(在eclipse Ctrl+Alt+T中)只需输入
mvn包
,然后从
target
文件夹复制生成的
war
-文件,将其粘贴到本地Tomcat的
webapps
文件夹下,请求{your application name},您应该会看到来自Tomcat的消息
Hello World

现在,您可以添加所需的依赖项并继续编码

这并没有解决我的问题,只是破坏了我的Tomcat服务器。不,这也不是问题。我编辑了这篇文章来添加我的主要分类,我已经删除了我的答案。为什么要使用web.xml?我曾经有一个maven-war插件,简单到'org.apache.maven.plugins maven-war-plugin 3.2.2 false`.@Meziane这是我最后一个pom配置,我在互联网上找到了它。但是我用的是false,但这对我一点帮助都没有。让我知道更多关于你拥有的东西:让它工作起来非常简单。从一个简单的pom开始:你只需要
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>
    @RestController
    @SpringBootApplication
    public class SpringBootTomcatApplication extends SpringBootServletInitializer {
    ...
      @RequestMapping(value = "/")
      public String hello() {
        return "Hello World from Tomcat";
      }
    }