精华内容
下载资源
问答
  • 若依前后端分离打包发布(jar,nginx)
    更多相关内容
  • 主要介绍了SpringBoot如何实现分离资源文件并打包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 昨天和项目组内一位经验丰富的老师傅探讨,围绕着SpringBoot打包后动不动就一百多兆,在现场远程维护部署时非常不方便的问题,进行了一番请教。问题的根本是:有时候仅仅改动了一点点东西,却要发给现场替换包含所有...

    一、前言

    昨天和项目组内一位经验丰富的老师傅探讨,围绕着SpringBoot打包后动不动就一百多兆,在现场远程维护部署时非常不方便的问题,进行了一番请教。问题的根本是:有时候仅仅改动了一点点东西,却要发给现场替换包含所有依赖的jar包,这非常的笨重不方便。

    于是又学到了新知识。抽空浏览了网上的资料,结合工作中的实际使用场景,整理了本文的内容,方便后期随时取用。

    二、正文

    之前一直使用SpringBoot初始化建立项目默认的spring-boot-maven-plugin插件,进行项目打包,这个插件会将项目所有的依赖打入BOOT-INF/lib下,这就导致了jar包的体积非常臃肿,尤其涉及到几十个子项目时,整个项目的体积可想而知。但是,各项目之间有非常的公共依赖,因此,分离打包还是比较有意义的。

    本文还是在上两篇的项目上进行测试,毕竟只改了pom文件中的build标签下的插件内容
    如果有兴趣可翻阅:SpringBoot整合新版Mybatis-Plus代码生成器SpringBoot整合Knife4j替代Swagger

    1.整个项目的目录结构

    在这里插入图片描述

    2.系统环境变量配置

    在这里插入图片描述

    3.pom文件配置——本文重点,其它部分甚至不用看

    pom中几乎所有的配置项都有比较详细的注释,表明每个属性是做什么,以及如何配置,请根据项目实际进行配置。

    • properties标签中定义依赖的输出目录、jar包的输出目录、resources中配置文件的输出目录。
       <properties>
            <!--依赖输出目录-->
            <output.dependence.file.path>lib/</output.dependence.file.path>
            <!--jar输出目录-->
            <output.jar.file.path>bin/</output.jar.file.path>
            <!--配置文件输出目录-->
            <output.resource.file.path>config/</output.resource.file.path>
        </properties>
    
    • build标签:plugins标签中一共包含三个插件:maven-jar-plugin、maven-dependency-plugin和maven-resources-plugin。

    啰嗦一句,在下方配置中会看到有…/这种相对路径的配置,其实非常简单,只要把握住一点,一切从最终的jar包出发,考虑如何让它能够找到它所依赖的lib和配置文件即可。

    <build>
            <plugins>
                <!-- 打JAR包,不包含依赖文件;显式剔除配置文件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <!--${env.LEARN_HOME}为项目配置的环境变量,下同-->
                        <outputDirectory>${env.LEARN_HOME}/${output.jar.file.path}</outputDirectory>
                        <!-- 将配置文件排除在jar包 -->
                        <excludes>
                            <exclude>*.properties</exclude>
                            <exclude>*.yml</exclude>
                            <exclude>*.xml</exclude>
                            <exclude>*.txt</exclude>
                        </excludes>
                        <archive>
                            <!-- 生成的jar中,包含pom.xml和pom.properties这两个文件 -->
                            <addMavenDescriptor>true</addMavenDescriptor>
                            <!-- 生成MANIFEST.MF的设置 -->
                            <manifest>
                                <!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库 下面可能会有多个包,并且只有一个是正确的,
                                其余的可能是带时间戳的,此时会在classpath下面把那个带时间戳的给添加上去,然后我们 在依赖打包的时候,
                                打的是正确的,所以两头会对不上,报错。 -->
                                <useUniqueVersions>false</useUniqueVersions>
                                <!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
                                <addClasspath>true</addClasspath>
                                <!-- MANIFEST.MF 中 Class-Path 各个依赖加入前缀 -->
                                <!--这个jar所依赖的jar包添加classPath的时候的前缀,需要 下面maven-dependency-plugin插件补充-->
                                <!--一定要找对目录,否则jar找不到依赖lib,前边加../是因为jar在bin下,而bin与lib是平级目录-->
                                <classpathPrefix>../${output.dependence.file.path}</classpathPrefix>
                                <!--指定jar启动入口类 -->
                                <mainClass>com.ieslab.knife4j.demo.DemoApplication</mainClass>
                            </manifest>
                            <manifestEntries>
                                <!-- 假如这个项目可能要引入一些外部资源,但是你打包的时候并不想把 这些资源文件打进包里面,这个时候你必须在
                                这边额外指定一些这些资源文件的路径,假如你的pom文件里面配置了 <scope>system</scope>,就是你依赖是你本地的
                                资源,这个时候使用这个插件,classPath里面是不会添加,所以你得手动把这个依赖添加进这个地方 -->
                                <!--MANIFEST.MF 中 Class-Path 加入自定义路径,多个路径用空格隔开 -->
                                <!--此处resources文件夹的内容,需要maven-resources-plugin插件补充上-->
                                <Class-Path>../${output.resource.file.path}</Class-Path>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
    
                <!-- 复制依赖的jar包到指定的文件夹里 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <!-- 拷贝项目依赖包到指定目录下 -->
                                <outputDirectory>${env.LEARN_HOME}/${output.dependence.file.path}</outputDirectory>
                                <!-- 是否排除间接依赖,间接依赖也要拷贝 -->
                                <excludeTransitive>false</excludeTransitive>
                                <!-- 是否带上版本号 -->
                                <stripVersion>false</stripVersion>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <!-- 用于复制指定的文件 -->
                <plugin>
                	<groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <!-- 复制配置文件 -->
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <resources>
                                    <resource>
                                        <directory>src/main/resources</directory>
                                        <includes>
                                        	<!--将如下格式配置文件拷贝-->
                                            <exclude>*.properties</exclude>
                                            <exclude>*.yml</exclude>
                                            <exclude>*.xml</exclude>
                                            <exclude>*.txt</exclude>
                                        </includes>
                                    </resource>
                                </resources>
                                <!--输出路径-->
                                <outputDirectory>${env.LEARN_HOME}/${output.resource.file.path}</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    4. 打包

    首先,把右上角的闪电图标点上,可以在打包时“跳过测试模式”。然后分别双击执行clean和package命令,进行清理和打包。
    在这里插入图片描述
    打包成功:
    在这里插入图片描述
    打包完成后,我们去输出目录看一下:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.测试,测试依赖于前两篇所构建的测试项目,当然这不重要

    进入bin目录下:在地址栏输入cmd回车
    在这里插入图片描述
    启动项目:java -jar demo-1.0.0.jar
    在这里插入图片描述
    启动成功:
    在这里插入图片描述
    浏览器输入knife4j地址验证一下:
    在这里插入图片描述

    三、总结

    本文关于SpringBoot分离打包的内容就这么多,有兴趣可以试一下。

    当然还有很多不足需要继续探索的地方,比如,将所有的配置文件都输出到config目录下,项目很多怎么办?是不是应该考虑config目录下,每一个子项目一个独立目录?还有整个项目的公共配置如何处理?不可能每个项目都维护一份公共配置信息,万一修改需要修改很多处,那需要怎么解决?

    下次见。

    展开全文
  • org.apache.maven.plugins maven-jar-plugin true lib/ xx.xx.xx.xx <!-- 分离配置文件 *.** */*.xml
  • 前后端分离打包、运行 一、本地打包运行 在终端中运行程序 前端: 前提:已安装npm,编译环境为VS Code 1、跳转至Vue项目所在目录 $ cd Vue项目所在的目录 2、打包Vue文件,打包完成后会在当前目录下产生dist目录 $ ...

    前后端分离打包、运行(springboot+vue)

    一、本地打包运行

    在终端中运行程序

    前端:

    前提:已安装npm,编译环境为VS Code
    1、跳转至Vue项目所在目录

    $ cd Vue项目所在的目录

    2、打包Vue文件,打包完成后会在当前目录下产生dist目录

    $ npm run build

    3、安装express-generator生成器

    $ npm install express-generator -g

    4、创建一个express项目

    $ express expressDemo (expressDemo是项目名)

    5、进入expressDemo目录,安装项目依赖

    $ cd expressDemo

    $ npm install

    6、把dist目录下的所有文件复制到express项目的public文件夹下

    7、启动expressDemo

    $ npm start

    此时会出现node ./bin/www,此时我们可在express项目的bin文件夹下发现www文件,打开后发现里面的port端口号为3000,故而在浏览器中输入localhost:3000即可访问在Vue-CLI中localhost:8080的页面,此处的端口变更不会影响后端文件的使用。

    后端:
    前提:已安装可用maven仓库,使用IDEA编译环境
    1、打包

    在IDEA右边栏中选中maven,点击生命周期/package(可以先clean清除一下,然后package),打包完成后会生成target文件夹

    2、提取jar包

    打开生成的target文件夹,发现会出现一个以.jar为后缀的文件

    3、然后在终端运行(将路径定位至jar包所在的路径)

    java -jar jar包文件名

    二、云端部署

    终端中连接可用ssh root@ip地址

    前端

    1、安装nginx

    yum intall nginx

    2、运行nginx

    systemctl restart nginx.service

    4、将前端的dist文件夹上传

    5、将dist文件夹导入/usr/share/nginx/htm,或使用vim修改nginx.conf,将路径修改为dist文件夹下

    6、重启nginx

    systemctl restart nginx.service

    后端

    1、将jar包上传至云端

    2、执行jar包

    java -jar ruoyi.jar ------直接运行,日志会打印在终端上,其余方式运行都会产生一个

    & ------加上这个表示页面不关闭时在后台运行

    nohup java -jar ruoyi.jar & -----表示页面关闭时在后台运行

    服务器

    服务器操作:

    1、登录 mysql -u root -p

    2、基本指令

    show databases 查看数据库

    use testdb; 进入testdb数据库

    show tables; 查看数据库中的表

    creat database testdb 创建数据表

    select * from 表名 查看数据表中的数据

    本地数据表上传至服务器端数据库

    1、数据表表上传至服务器

    2、打开服务器端的数据库

    3、输入命令

    source /root/probe.sql (/root/probe.sql即sql文件在服务器上的位置)

    重点:打开3306端口

    1、首先检查是否已经安装,如果已经安装先删除以前版本,以免安装不成功
    [root@localhost ~]# php -v

    [root@localhost ~]# rpm -qa | grep mysql

    [root@localhost ~]# yum list installed | grep mysql

    如果显示以下内容说明没有安装服务
    没有显示
    -bash: gerp: command not found

    2、下载MySql安装包
    [root@localhost ~]# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

    [root@localhost ~]# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    5.安装MySql
    [root@localhost ~]# yum install -y mysql-server

    [root@localhost ~]# yum install mysql-community-server
    如果显示以下内容说明安装成功
    Complete!

    3、设置开启服务
    [root@localhost ~]# systemctl start mysqld.service

    4.查看MySql默认密码
    [root@localhost ~]# grep ‘temporary password’ /var/log/mysqld.log

    5.登陆MySql,输入用户名和密码
    [root@localhost ~]# mysql -uroot -p

    6.修改当前用户密码
    mysql>SET PASSWORD = PASSWORD(‘@hp123!_’);

    注意:

    若修改时出现错误,可能是版本过高,例如:将 validate_password_policy修改 validate_password.policy,余者类似

    mysql为了安全,有自己的策略要求,如果我们想将其设置为我们常用的root或者123456这样的密码,需要修改策略要求,具体命令如下:

    1.设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
    输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值

    2.当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,
    输入设值语句 “ set global validate_password_length=6; ” 进行设值

    3.现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,
    输入修改语句 “ ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’; ” 可以看到修改成功,表示密码策略修改成功了!!!

    可参考:

    解决MySQL8.0报错:Unknown system variable ‘validate_password_policy’

    服务器 配置mysql

    前后端分离打包

    展开全文
  • Gradle 项目 项目与依赖分离打包Gradle 项目 项目与依赖分离打包项目代码与依赖分离打包并运行时需要注意的问题错误信息为:tk.mybatis.mapper.MapperException: 无法获取实体类com.xxx 对应的表名!1. 引入已修改的...

    Gradle 项目 项目与依赖分离打包

    【参考连接】

    项目代码与依赖分离打包并运行时需要注意的问题

    问题:错误信息为:tk.mybatis.mapper.MapperException: 无法获取实体类com.xxx 对应的表名!

    修复1. 引入已修改的jar包文件

    如果项目中引入依赖tk.mybatis:mapper-spring-boot-starter:2.1.5,则在运行时依赖lib库中加入位于bootjar文件夹下的依赖mapper-spring-boot-autoconfigure-2.1.5.jar

    下载修复可替换的依赖包

    修复2. 修改热加载参数

    启动jar时,添加命令为:–spring.devtools.restart.enabled=false

    问题:application.yml文件不生效导致错误

    发生场景:如果不做处理时需要在下面的一级目录中添加application.yml文件才能正常启用jar及系统。

    目录层级如下:

    一级目录二级目录三级目录
    lib*.jar(所有依赖都在该文件夹中)
    xxx-start.jar
    start-xxx.bat
    application.yml(文件在此,才能正常启用jar及系统)

    修复1. 指定配置文件(application.yml)加载路径

    在启动jar包时加入指定参数,或者写进可以正常加载的yml中
    –spring.config.additional-location=optional:classpath:/BOOT-INF/classes/

    展开全文
  • 标题为什么使用gradle而不是maven分离打包有什么优势展示gradle多模块构建目录结构settings.gradle文件配置父模块,build.gradle配置公共模块common build.gradle配置framework模块build.gradle配置api模块build....
  • 主要介绍了Spring boot打包jar分离lib和resources方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Maven静态资源分离打包一、项目打包 一、项目打包 <build> <plugins> <!-- 这个插件是用来打jar包的 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <...
  • vue前端分离打包部署

    千次阅读 2019-03-30 16:16:47
    vue前端分离打包部署 项目配置 congig/index.js 修改 assetsPublicPath: ‘./’ 运行npm run build 进行打包 centos nginx配置 下载安装包 cd /usr/local/software wget ...
  • 需要在打包的那个项目模块下的pom文件中加入build属性 <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*....
  • 为了方便进行静态资源管理及增量部署,对项目引用jar包以及静态资源分离打包,提高打包的效率及部分前端微调项修改后及时进行无重启更新; 具体步骤如下: 1、初次打包进行全量打包,对打包的jar进行解压,解压后的...
  • 在Discuz产品系列(包括UCenter、UCHome)中有一个flash头像上传编辑的功能比较好用,和之前自己用js实现的照片在线编辑插件比较像,于是想将它独立出来,一方面可以学习研究,另一方面有机会可以在项目中使用(这里...
  • 问题1:springboot构建jar部署,maven构建的jar包含 \BOOT-INF\lib\下的所有...第一种打包:jar包和依赖包分离打包(只有代码) b.第二种打包:jar包包含依赖包(有代码和依赖包) IDEA打包springboot多模块项目jar包
  • 前后端项目分离打包(vue+springboot)

    千次阅读 2019-05-04 17:20:55
    一般做法:前端用 webpack打包完生成 dist 内容后 手动 复制 dist 文件夹的内容到后端项目的 main/resources/public中。 推荐做法,使用 maven 插件来自动管理: 前端转成 maven 项目,加入前端的 maven 插件,支持...
  • 1.vue-cli配置详情 css: { // 是否提取css生成单独的文件 默认 true ... } }, output: { // 输出重构 打包编译后的 文件名称 filename: `js/[name].js`, // chunkFilename: `js/[name].${conf.version}.js` }, },
  • SpringBoot/SpringCloud maven分离打包

    千次阅读 2020-01-19 15:52:22
    SpringBoot/SpringCloud maven分离打包 目的:把微服务的jar包尽量变得足够小,公共不变jar包进行提取放到特定文件夹内,然后启动jar包的时候进行指定lib文件目录地址即可。 以下是我的maven配置: <...
  • 2、打包 3、部署运行 1、在 pom 中添加如下内容 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin<...
  • springboot jar、资源文件分离打包配置

    千次阅读 2019-01-21 15:15:45
    pom.xml &lt;build&gt; &...--打包jar --&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifa...
  • 1. 在vue项目的目录下,用npm run build 生成dist目录,将目录下的static和index.html复制到SpringBoot项目下的resource目录下 这个时候发现启动Springboot项目,不能打开index页面 ... 起初百度之后一位是相对路径和...
  • 基于vuecli的根据不同的环境调用不同的接口,本地代理跨域,第三方资源分离打包
  • vue打包之后部署服务器访问服务器端接口404 1.vue+axios本地开发环境请求线上服务器接口跨域没有问题 开发环境跨域配置 // vue.config.js devServer: { proxy: { [process.env.VUE_APP_BASE_API]: { target: ...
  • SpringBoot分离打包

    2022-04-29 15:35:54
    springboot三种分离打包,maven-jar-plugin,spring-boot-maven-plugin,assembly
  • 主要介绍了详解webpack分离css单独打包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 1 整体打包 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId...
  • 前后台分离的项目:项目演示地址:https://github.com/haijiao12138/houyuanbo.niua.git 一:前台打包部署到服务器: 改动api.js,在api.js中定义baseUrl,映射后台的请求地址;在前台vue中也要写入对应的请求头: ...
  • Step1安装插件 npm i extract-text-webpack-plugin webpack.config.js 配置 const ExtractPlugin = require('extract-text-webpack-plugin') Step2 配置 区分环境 ...开发环境 development ...正式环境中 去掉style-...
  • 所以如下可以将依赖包,配置文件,运行文件分离打包。以后多半是更新运行文件,分离后可能也就几百k 此方法只需要修改pom文件,需要增加三个plug。配置文件如下: 1. jar依赖包分离 在打包时将依赖包copy到指定...
  • 一般情况下我们对springboot应用打包时使用springboot的maven插件spring-boot-maven-plugin的maven进行打包打包完成得到一个fatjar,fatjar的优点是可以直接运行,缺点是体积太大,不利于传输。 springboot应用打...
  • springboot 分离 lib 打包方式 <build> <!-- 打包后的文件名--> <finalName>innojet-web</finalName> <plugins> <!-- 默认的打包插件,删除,因为这个插件打包分离的整体的包...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,061
精华内容 30,024
关键字:

分离打包