关键词:
【中文标题】带有 Maven Shade 插件的 Spring Boot - 未映射控制器(404 错误)【英文标题】:Spring Boot With Maven Shade Plugin - Controllers not mapped (404 Error) 【发布时间】:2016-02-14 17:23:37 【问题描述】:对于我的带有嵌入式 tomcat 的 Spring boot 应用程序,由于某些限制,我需要取消 spring-boot-maven-plugin
并需要使用 maven-shade-plugin
。使用 maven package 命令,我可以成功创建 jar 文件。但是,我所有的控制器都停止工作并给我 404 错误。放置在我的资源文件夹中的静态内容也不再提供。总是出现 404 错误。
我的 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>
我照常运行应用程序:
@SpringBootApplication
public class MyMainClass
public static void main(String[] args)
SpringApplication.run(MyMainClass.class, args);
我还必须创建以下 EmbeddedServletContainerFactory bean,否则会引发错误。
@Bean
public EmbeddedServletContainerFactory servletContainer()
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
return tomcat;
最后,我只有一个示例控制器,
@RequestMapping(value = "/car", method = RequestMethod.GET)
@ResponseBody
public Car test()
return new Car();
当我使用 spring-boot-maven 插件时,同样的代码可以正常工作。在我开始使用 maven-shade-plugin 后不久,tomcat 就成功启动了。但是,所有控制器都给我 404 错误。如果我做错了什么,请指导我。
【问题讨论】:
如果有人可以提供一个带有 maven shade 插件的 Spring Boot 工作示例,那将会很有帮助。谢谢。 【参考方案1】:如果你想从 spring-boot-maven 插件迁移到 maven-shade 插件,这非常简单。我在 pom.xml 中添加了以下插件信息并解决了问题。
(https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/1.2.6.RELEASE/spring-boot-starter-parent-1.2.6.RELEASE.pom)
依赖管理:
<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>
构建插件:
<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>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.2.7.RELEASE</version>
</dependency>
</dependencies>
<configuration>
<keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
<resource>META-INF/spring.factories</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>sg.butterfly.emenu.api.config.EmenuApp</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
【讨论】:
【参考方案2】:除了现有的,尝试使用AppendingTransformer,例如:
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>abc.MyMainClass</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.tooling</resource>
</transformer>
参考文档:https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer
【讨论】:
感谢您的快速回复。我试过了,但这不起作用。似乎我从 spring-boot-maven 插件迁移到 maven-shade-plugin 的方式是错误的。需要弄清楚如何正确配置它。使用maven-shade-plugin打包maven项目,项目使用spring框架,打包成jar时报错,跪求大佬,弄了好久没出?
这个是我报错指令,和pom的写法,球球大佬!使用shade插件来打包.在shade的打包配制中指明spring.handlers和spring.schemas文件会以append方式加入进来,从而确保其他spring的jar中的这两个文件的信息不会被遗漏。追问现在是这样的,那... 查看详情
Maven shade插件打包DLL
】Mavenshade插件打包DLL【英文标题】:MavenshadepluginPackagingDLL【发布时间】:2014-07-2313:46:36【问题描述】:我必须在我的项目中添加一个JNI模块。我在Maven中将模块安装为两个不同的工件:jar库:mvninstall:install-file-DgroupId=com.test-Darti... 查看详情
使用 Shade 或 Maven 程序集插件从 Maven 项目构建可执行 Jar
】使用Shade或Maven程序集插件从Maven项目构建可执行Jar【英文标题】:BuildanexecutableJarfromaMavenProjectwithdependencieswithShadeorMavenAssemblyPlugin【发布时间】:2021-12-2813:55:36【问题描述】:我正在尝试创建一个打包了依赖项的可执行jar。到... 查看详情
由 Maven shade 插件构建的无效或损坏的 JAR 文件
】由Mavenshade插件构建的无效或损坏的JAR文件【英文标题】:InvalidorcorruptJARFilebuiltbyMavenshadeplugin【发布时间】:2012-10-1220:27:45【问题描述】:将MavenjFree依赖项添加到我现有的应用程序后,我无法执行创建的jar。我得到的唯一错误... 查看详情
Maven Shade 插件 + MsSQL JDBC -> 即时 JNI 错误 - 无效的签名文件清单
】MavenShade插件+MsSQLJDBC->即时JNI错误-无效的签名文件清单【英文标题】:MavenShadePlugin+MsSQLJDBC->instantJNIerror-InvalidsignaturefileManifest【发布时间】:2018-10-1014:30:31【问题描述】:在我开始使用MsSQLJDBC之前,我的Mavenshade插件运行良... 查看详情
将 maven-bundle-plugin 与 maven-shade-plugin 一起使用
...些包。我还使用maven-bundle-plugin来生成清单。问题是捆绑插件在阴影插件之前运行(在进程 查看详情
Maven shade插件将dependency-reduced-pom.xml添加到基本目录
】Mavenshade插件将dependency-reduced-pom.xml添加到基本目录【英文标题】:Mavenshadepluginaddingdependency-reduced-pom.xmltobasedirectory【发布时间】:2012-07-0401:52:16【问题描述】:mavenshade插件正在创建一个名为dependency-reduced-pom.xml的文件以及artifa... 查看详情
如何在 maven-shade-plugin 创建的 Jar 中包含测试类?
...题描述】:我正在尝试使用Maven将我的测试类打包到一个带有依赖项的可执行jar中,但我很难做到这一点。到目前为止,这是我的pom.xml:<project><modelV 查看详情
缺少 Maven Shade JavaFX 运行时组件
...ar。从我所做的研究来看,似乎最好的方法是通过mavenshade插件。但是,当我运行它时,我得到了这个错误:错误:JavaFX运行时组件丢失,是运行此应用程序所必需的我不 查看详情
缺少 Maven Shade JavaFX 运行时组件
...ar。从我所做的研究来看,似乎最好的方法是通过mavenshade插件。但是,当我运行它时,我得到了这个错误:错误:JavaFX运行时组件丢失,是运行此应用程序所必需的我不 查看详情
maven-shade-plugin 错误:在“资源”的 org.apache.maven.plugins.shade.resource.ManifestResourceTransformer 中找不
】maven-shade-plugin错误:在“资源”的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到setter、adder或字段【英文标题】:maven-shade-pluginerror:Cannotfindsetter,addernorfieldinorg.apache.maven.plugins.shade.resource.Man 查看详情
maven-shade-plugin 的用途是啥,为啥要重新定位 Java 包?
】maven-shade-plugin的用途是啥,为啥要重新定位Java包?【英文标题】:Whatisthemaven-shade-pluginusedfor,andwhywouldyouwanttorelocateJavapackages?maven-shade-plugin的用途是什么,为什么要重新定位Java包?【发布时间】:2012-11-1704:50:41【问题描述】:... 查看详情
Netbeans:项目主神器通过maven-shade-plugin处理
】Netbeans:项目主神器通过maven-shade-plugin处理【英文标题】:Netbeans:project\'smainartifactisprocessedthroughmaven-shade-plugin【发布时间】:2014-09-0111:53:37【问题描述】:我正在使用maven-shade-plugin构建我的项目,而Netbeans8.0抱怨以下警告:项... 查看详情
如何判断哪个签名的 jar 导致 maven-shade-plugin 失败?
】如何判断哪个签名的jar导致maven-shade-plugin失败?【英文标题】:HowcanItellwhichsignedjariscausingmaven-shade-plugintofail?【发布时间】:2015-07-2319:24:46【问题描述】:要运行maven-shade-plugin,我必须使用here描述的方法,因为签名依赖项,如... 查看详情
maven-shade-plugin 和自定义包装类型
】maven-shade-plugin和自定义包装类型【英文标题】:maven-shade-pluginandcustompackagingtype【发布时间】:2015-09-2413:19:31【问题描述】:我正在尝试使用内置的依赖项打包一个OSGi包。我正在使用maven-shade-plugin2.3包含一些依赖项,但它在打... 查看详情
使用 maven-shade-plugin 构建的 pdfbox 程序的结果与正常的 NetBeans 运行不同
】使用maven-shade-plugin构建的pdfbox程序的结果与正常的NetBeans运行不同【英文标题】:Resultofprogramusingpdfboxbuiltwithmaven-shade-pluginisdifferentthannormalNetBeansRun【发布时间】:2013-02-0213:31:02【问题描述】:我有一个使用PDFBox1.7.1的java程序,... 查看详情
带有 JDK 17 的 Spring Boot 2.5+ - maven surefire 不执行现有测试
】带有JDK17的SpringBoot2.5+-mavensurefire不执行现有测试【英文标题】:SpringBoot2.5+withJDK17-mavensurefiredoesn\'texecuteexistingtests【发布时间】:2022-01-1523:40:33【问题描述】:使用JDK17将SpringBoot2.2应用程序更改为2.5.5时,Surefire测试插件不会启... 查看详情
Spring boot Flyway Jooq Code gen maven 插件顺序
...flyway:migrate始终在jooq:generate-sources之前执行?我正在使用带有SpringBoot的Maven包装器。<plugin><groupId&g 查看详情