Für meine Spring Boot-Anwendung mit eingebetteten Tomcat, aufgrund einiger Einschränkungen muss ich spring-boot-maven-plugin
abschaffen und müssen maven-shade-plugin
verwenden. Mit dem Befehl maven package konnte ich die JAR-Datei erfolgreich erstellen. Alle meine Controller funktionieren jedoch nicht mehr und geben mir 404 Fehler. Auch statische Inhalte, die in meinem Ressourcenordner abgelegt sind, werden nicht mehr bedient. Immer 404 Fehler erhalten.Spring Boot mit Maven Shade Plugin - Controller nicht gemappt (404 Fehler)
mein pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.2.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>abc.MyMainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ich betreibe die Anwendung wie gewohnt:
@SpringBootApplication
public class MyMainClass{
public static void main(String[] args) {
SpringApplication.run(MyMainClass.class, args);
}
}
Auch ich hatte folgende EmbeddedServletContainerFactory Bohne zu schaffen, sonst wird ein Fehler ausgelöst werden.
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
return tomcat;
}
Schließlich, ich habe nur einen eine Probe-Controller,
@RequestMapping(value = "/car", method = RequestMethod.GET)
@ResponseBody
public Car test() {
return new Car();
}
Derselbe Code funktioniert ohne Problem, wenn ich Feder-boot-Maven-Plugin verwenden. Bald nachdem ich angefangen habe, maven-shade-plugin zu benutzen, bootet Tomcat erfolgreich. Alle Controller geben jedoch 404 Fehler. Bitte führe mich, wenn ich etwas falsch mache.
Es wäre hilfreich, wenn jemand ein funktionierendes Beispiel des Frühlings-Boot mit Maven zur Verfügung stellen kann Schatten-Plugin. Vielen Dank. –