前言

这问题不是我发现的。。刚好碰到而已,下面几位同仁都遇到过:

spring-boot子模块打包去掉BOOT-INF文件夹

摘抄如下:

1.spring-boot maven打包,一般pom.xml文件里会加

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
这样打的jar里会多一个目录BOOT-INF。

2.引起问题,程序包不存在。

3.解决办法,如果A子模块包依赖了B子模块包,在B子模块的pom文件,加入

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
--------------------- 
作者:zsywangyi 
来源:CSDN 
原文:https://blog.csdn.net/zsywangyi/article/details/78319130 
版权声明:本文为博主原创文章,转载请附上博文链接!

顺便将评论放一放:
在这里插入图片描述

优秀,估计这方法是可行的。

还有其他文章可以参考:
springboot打包部署的那些事

这篇也详细,抄录如下:

一、打成jar部署
利用springboot的插件打包

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打jar的小细节
当有引入本地jar配置,如下图


pom.xml配置如下

<dependency>
            <groupId>eis_protobuf</groupId>
            <artifactId>eis_protobuf</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/eis_protobuf.jar</systemPath>
        </dependency>
springboot-maven-plugin打包的第一级目录为Boot-INF,如果不做任何配置,直接mvn clean package会发现无法把本地的jar打进Boot-INF中,则此时要做如下配置

方法一
在pom.xml的resources节点添加如下内容

<resource>
                <directory>lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
ps: 如果遇到一些外部配置文件比如mybatis的mapper文件或者activiti生成器的json文件,则也要把相应的文件打进resources中,否则项目启动会因找不到配置文件,而报错,配置文件如下

<resource>
                <directory>${basedir}/src/main/java</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>templates/**</exclude>
                    <exclude>static/**</exclude>
                </excludes>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.yml</include>
                    <include>**/*.yaml</include>
                    <include>**/*.properties</include>
                    <include>**/*.key</include>
                    <include>**/*.des</include>
                    <include>**/*.template</include>
                    <include>**/*.json</include>
                </includes>
            </resource>
方法二
在spring-boot-maven-plugin插件中设置includeSystemScope参数

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <includeSystemScope>true</includeSystemScope>
      </configuration>
    </plugin>
  </plugins>
</build>
二 把sprinboot部署到外部tomcat
1、修改打包方式,把jar改成war,改成如下配置

<packaging>war</packaging>
2、引入tomcat依赖jar,scope范围为provided,并排除springboot内嵌的tomcat依赖jar,其实不排除也没关系,不影响项目运行

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</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>
3、修改打包插件,不使用spring-boot-maven-plugin插件打包,因为这个打包插件会把jar打包在Boot-INF目录下导致别的项目引用时引用不到,此时改用maven-war-plugin打包,具体配置如下

<plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>2.3.2</version>
         <configuration>
            <source>1.8</source>
            <target>1.8</target>
         </configuration>
      </plugin>
4、修改启动类,启动类继承SpringBootServletInitializer,并重写configure方法

@SpringBootApplicationpublic class SpringbootDemo extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootDemo.class);
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(SpringbootDemo.class).web(true).run(args);
    }
}
原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于 2018-09-27

好了,可惜我用的gradle,而打包的就是这样的:
在这里插入图片描述

那么解决方案是什么?

参考一下:
Grails 3 war -Inline plugin issues

防止被墙看不到,下面是答案:
在这里插入图片描述

然后不行,不说repackge是srping boo t1.0的产物,就是现在将bootJar.enable=false bootWar.enable=false都禁用也没用的。

尝试用gradle的shadow插件
请具体看:
shadow官网

注意,目前为止要用到gradle5,我已经升级了。。请自行升级。然后build可能会出现:
在这里插入图片描述

要启用zip64:
在这里插入图片描述
打包成功。可以看到:
在这里插入图片描述

打包后出现问题:
在这里插入图片描述

缺少spring.facxxx文件。。嗯,其实,我们可以在源代码里面看到
在这里插入图片描述

在autoconfigure里面。。好了,我们找到自己版本号的这个文件,这样找:

idea中看
在这里插入图片描述

然后找到:
在这里插入图片描述

解压缩复制里面的spring.faxxx文件

在这里插入图片描述

放到
在这里插入图片描述

打包:

GitHub 加速计划 / sp / spring-boot
73.97 K
40.4 K
下载
spring-projects/spring-boot: 是一个用于简化Spring应用开发的框架。适合用于需要快速开发企业级Java应用的项目。特点是可以提供自动配置、独立运行和内置的Tomcat服务器,简化Spring应用的构建和部署。
最近提交(Master分支:1 个月前 )
fdf24c6c Closes gh-42976 7 天前
3c42ba8c * pr/42974: Fix copyright year of updated file Polish Closes gh-42974 7 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐