Heim  >  Artikel  >  Java  >  So packen Sie SpringBoot in ein Kriegspaket, um es unter Tomcat oder Wildfly auszuführen

So packen Sie SpringBoot in ein Kriegspaket, um es unter Tomcat oder Wildfly auszuführen

WBOY
WBOYnach vorne
2023-05-10 17:04:061589Durchsuche

Die Standardverpackungsmethode von Springboot ist das JAR-Paket. Der Vorteil des JAR-Pakets besteht darin, dass die Konfiguration nicht geändert werden muss und Tomcat in ein JAR-Paket gepackt werden kann, um es auszuführen Tests. Wenn man jedoch bedenkt, dass der Front-End-Code nur in ein Kriegspaket gepackt werden kann, reicht es aus, den Back-End-Code in ein Kriegspaket zu packen und ihn zusammen mit dem Front-End-Code in Webapps im Tomcat-Container auszuführen.

SpringBoot-Verpackungsform

Standardmäßig wird das erstellte SpringBoot-Projekt in Form eines JAR-Pakets verpackt. Gleichzeitig ist ein Tomcat-Container eingebaut.

Was sollten Sie also tun, wenn Sie Springboot in ein Kriegspaket packen und es in einem Container wie Wildfly bereitstellen möchten?

Im Folgenden werden die einzelnen Schritte ab der Erstellung eines Projekts erläutert.

Ein Projekt erstellen

Es gibt keine Schwierigkeiten, ein Projekt zu erstellen. Verwenden Sie einfach das Ideentool, um ein einfaches Maven-Projekt zu erstellen, und Sie möchten es einfach in ein Kriegspaket umwandeln modifizieren Sie es.

Ändern Sie die pom.xml-Konfiguration

Ändern Sie nach dem Erstellen des Projekts die pom.xml-Datei und fügen Sie das übergeordnete Tag hinzu.

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.5.RELEASE</version>
  <relativePath/>
</parent>

Wenn es ursprünglich ein Springboot-Projekt war, ist es bereits enthalten und muss nicht geändert werden.

Setzen Sie die Verpackungsmethode in pom.xml auf war.

<packaging>war</packaging>

Fügen Sie die Abhängigkeitskonfiguration wie folgt hinzu oder ändern Sie sie:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

Unter anderem muss die Tomcat-Abhängigkeit in Spring-Boot-Starter-Web ausgeschlossen werden. Fügen Sie gleichzeitig die Abhängigkeit von Servlet-API hinzu. Beachten Sie, dass die hier hinzugefügte Abhängigkeit Servlet2.5 ist.

Verwenden Sie die folgenden Plug-Ins im Build für die Verpackung.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.6</version>
      <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
      </configuration>
    </plugin>
  </plugins>
</build>

Starten Sie die Hauptmethode

Wenn bereits eine Hauptmethode zum Starten vorhanden ist, lassen Sie die Hauptmethode SpringBootServletInitializer erben und implementieren Sie ihre Methode. Wenn es sich um ein neu erstelltes Projekt handelt, erstellen Sie SpringBootApp (Startklasse) direkt im Verzeichnis der obersten Ebene und starten Sie dann diam wie folgt.

@SpringBootApplication
public class SpringBootApp extends SpringBootServletInitializer {
 public static void main(String[] args) {
 SpringApplication.run(SpringBootApp.class, args);
 }
 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
 return builder.sources(SpringBootApp.class);
 }
}

Packaging

Führen Sie einfach die Paketverpackung über den Maven-Befehl aus, und das Kriegspaket kann im Zielverzeichnis generiert werden.

Was die Bereitstellung von Tomcat und Wildfly betrifft, können Sie das Kriegspaket im entsprechenden Verzeichnis ablegen und den Dienst starten.

Ausnahmen

Wenn während des Startvorgangs eine Ausnahme ähnlich der folgenden auftritt (was darauf hindeutet, dass web.xml fehlt):

Fehler beim Zusammenstellen von WAR: webxml-Attribut ist erforderlich (oder bereits vorhandenes WEB-INF/web.xml, wenn (wird im Aktualisierungsmodus ausgeführt)

Achten Sie darauf, das POM-Datei-Paket-Plug-In zu überprüfen und festzustellen, ob Tomcat-Probleme behoben wurden, und prüfen Sie, ob das oben genannte Paket-Plug-In korrekt ist.

Der Grund für das Problem ist: Auf das Abhängigkeitspaket spring-boot-starter-web wird im Springboot-Projekt verwiesen. Der in diesem Paket referenzierte Spring-Boot-Starter-Tomcat enthält den in Tomcat eingebetteten Servlet-Container und seine verschiedenen Versionen implementieren unterschiedliche Servlet-Versionsspezifikationen.

Servlet/JSP Version 2.5/2.1 unterstützt Tomcat Version 6.0.x und die minimale Java-Version ist 1.5. Servlet/JSP Version 3.0/2.2 unterstützt Tomcat Version 7.0.x und die minimale Java-Version ist 1.6.

Da oben Servlet2.5 verwendet wird, tritt die obige Ausnahme auf, wenn keine web.xml-Datei vorhanden ist.

Lösung 1: Wenn die Servlet-Version kleiner als 3 ist, verwenden Sie zum Erstellen die Datei /src/main/webapp/WEB-INF/web.xml.

Lösung 2: Fügen Sie das Maven-War-Plugin-Plugin unter dem Build von pom.xml hinzu. Und setzen Sie failOnMissingWebXml auf false.

Das obige ist der detaillierte Inhalt vonSo packen Sie SpringBoot in ein Kriegspaket, um es unter Tomcat oder Wildfly auszuführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen