cmd运行jar包报错找不到主类_SpringBoot+Vue前后端一次打包为一个Jar包运行

玩过最新版Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,生成一个jar包,这样的好处显而易见,部署的时候服务器不需要安装node环境单独部署前端项目,或者也不需要在写完前端代码后,手动打包前端项目再将js文件拷贝到SpringBoot目录下面。其实,我早想这样玩玩了。下面就看怎么玩?

一、dubbo-admin简介

新版dubbo管控台github地址:https://github.com/apache/dubbo-admin

dubbo-admin前端使用Vue.js作为javascript框架,Vuetify作为UI框架;后端为标准spring boot工程。

他的生产环境部署方式

  1. 下载代码: git clone https://github.com/apache/dubbo-admin.git

  2. 在 dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址

  3. 构建mvn clean package

  4. 启动mvn --projects dubbo-admin-server spring-boot:ru

  5. 访问 http://localhost:8080

``构建只需要一条命令,奥妙在哪里呢?我们接下里进行实操。

二、前后端项目工程结构改造

建立父工程的原因是为了使IDEA可以同时管理后端和前端项目,父工程只需要一个文件夹,里面弄个pom.xml文件即可。了解过maven父子工程的同学应该很容易理解,我们已前后端分离的老项目为例进行改造。

1.在IDEA中新建maven父工程

这个父工程只需要有一个pom.xml文件就可以了,不要去勾选骨架

76c9c7502a99e85524dea8d636935ef2.png

接着设置父工程的属性

ae55be02a50610f1f1a15521379451f5.png

然后完成即可

41428d4dadc7c439250001300098f420.png

2.导入已存在的后端工程

将后端工程检出或拷贝到父工程的目录下

打开父工程的工程结构

900480adc7865b1eaed843b9bc0fbb00.png

切换到Modules选项,更改jdk的版本为8

b874e7a0341668809e8522f59a76582b.png

找到你父工程目录下的后端项目,进行模块添加

91b7164c0e6e0e59c001e977a479f349.png

39ac8ed6b9020d7f86861faea3456333.png

将后端项目作为maven项目导入

30de70aa5c1e2712673eadabeb954677.png

点击finish即可

3.导入已存在的前端工程

将后端工程检出或拷贝到父工程的目录下

91b7164c0e6e0e59c001e977a479f349.png

找到你的前端项目,进行模块添加

60f06486e00af7da8f571a6469d11bfa.png

完成后的这一步非常关键,选择创建模块

fa43b4b62a5d74cc077e0294e955f87f.png

剩余步骤直接点就可以了。

e96d1c50eb2495ac0b18079385a07a40.png

最终效果

808d0ce1f24fe89c0b9bb60901e38f4c.png

工程改造完成,总结一下,只是新建了一个父工程,将原来的项目移到这个父工程下即可

三、进行三个工程的maven打包配置

我们完全可以照着dubbo-admin工程的maven配置进行改造,主要的改动有:

  • 在父工程中指定子工程模块

  • 子工程指定父工程坐标

  • 后端子工程添加相应的maven插件

  • 后端子工程指定要拷贝到源地址和目标地址

  • 前端子工程也添加响应的maven插件

  • 前端安装node和npm

1.父工程maven配置

<?xml  version="1.0" encoding="UTF-8"?>

    4.0.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
    
    com.anymk
    parent-boot-vue
    1.0-SNAPSHOT

    
        csdn-reader
        construction-data
    
    pom

    
        2.1.6.RELEASE
        3.1.0
        3.1.0
        3.8.1
        1.8
        1.8
        UTF-8

        true
        3.0.0
        0.8.2

    

    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${maven.compiler.version}
                
                    ${java.source.version}
                    ${java.target.version}
                    ${file.encoding}
                
            
        
    

2.SpringBoot工程maven配置

<?xml  version="1.0" encoding="UTF-8"?>

    4.0.0
    
        com.anymk
        parent-boot-vue
        1.0-SNAPSHOT
    

    csdn-reader

    
        1.8
        2.1.8.RELEASE
        3.1.0
        3.1.0
        3.8.1
        1.8
        1.8
        UTF-8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.apache.httpcomponents
            httpclient
            4.5.8
        
        
            com.alibaba
            fastjson
            1.2.54
        
        
        
            org.jsoup
            jsoup
            1.12.1
        
        
            org.projectlombok
            lombok
            1.18.10
        
        
            mysql
            mysql-connector-java
            5.1.48
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.2.0
        

        
            com.alibaba
            druid
            1.1.12
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring.boot.version}
                
                
                    
                        package
                        
                            repackage
                        
                    
                
            
            
            
                org.apache.maven.plugins
                maven-clean-plugin
                ${maven.clean.version}
                
                    
                        
                            src/main/resources/static
                        
                        
                            src/main/resources/templates
                        
                    
                
            
            
            
                org.apache.maven.plugins
                maven-resources-plugin
                ${maven.resource.version}
                
                    
                        copy static
                        generate-resources
                        
                            copy-resources
                        
                        
                            src/main/resources/static
                            true
                            
                                
                                    
                                    ${project.parent.basedir}/construction-data/dist
                                    
                                        css/
                                        img/
                                        js/
                                        favicon.ico
                                    
                                
                            
                        
                    
                    
                        copy template
                        generate-resources
                        
                            copy-resources
                        
                        
                            src/main/resources/templates
                            true
                            
                                
                                    
                                    ${project.parent.basedir}/construction-data/dist
                                    
                                        index.html
                                    
                                
                            
                        
                    
                
            
        
    

3.Vue工程maven配置

vue项目里新添加的pom.xml文件

<?xml  version="1.0" encoding="UTF-8"?>

    
        com.anymk
        parent-boot-vue
        1.0-SNAPSHOT
    
    4.0.0

    construction-data

    
        UTF-8
        UTF-8
        1.8
        1.6
    

    
        
            
            
                com.github.eirslett
                frontend-maven-plugin
                ${frontend-maven-plugin.version}
                
                    
                        install node and npm
                        
                            install-node-and-npm
                        
                        
                            v10.16.0
                            6.9.0
                        
                    
                    
                    
                        npm install
                        
                            npm
                        
                        
                        generate-resources
                        
                        
                            install
                        
                    
                    
                    
                        npm run build
                        
                            npm
                        
                        
                            run build
                        
                    
                
            
        
    

4.maven插件作用讲解

最重要的插件就两个,一个是springboot项目里的maven-resources-plugin,另一个是vue项目里的frontend-maven-plugin

资源插件的复制路径很好理解,vue项目打包的目录如图所示

ece7b3db46ca908cb315e4d1d3a4879c.png

而我们要在springboot项目里运行,就要把index.html文件复制到templates目录,其他文件复制到static目录。

46953a9dd1fff46114eb85be70531ba4.png

四、 打包运行

1.运行前确保自己的node环境已经安装

事实证明我是想多了,插件里面已经进行了配置,不会使用本地的node环境,而是会去网上重新下载一个node,这样是有好处的,一个不懂node的后端工程师,本地不需要安装node,也可以将这个项目打包成功。在Mac和Linux的开发中,也不需要安装node。

c53aa6f5ad5e6572b4c90e8e47327dcd.png

2. 进入父工程根目录,执行打包命令

mvn clean package -Dmaven.test.skip=true

a333f184c7008352a15bd5acfd9d730c.png

3.打包成功

7e8f866c14921664d1415065f9943944.png

4.查看最终的jar包

9a373e24a01c4ddf1666b1b8a41962b8.png

找到本地的这个jar包,用解压缩工具查看静态资源有没有被打包进去

68755795c3798169f0b87c099805a1fb.png

5、安装过程中出现的错误

错误一、

在前端打包的过程中,还是出现了问题的,主要为打包程序并没有用本地的node,而是去网上直接下载了一个node.exe,该文件的位置为:

D:\parent-boot-vue\construction-data\node\node.exe

这个配置在哪里呢,是我们在pom.xml中进行了指定,包括node和npm的版本:

fdb6f73631ac091be41ee37addbb0ee1.png

在此过程中,报错如下:

faeb12c8b871fe08598377f83d8b92bc.png

看报错日志,大致意思为下载下来的node文件有问题,于是我手动下载了一个,地址为:

https://nodejs.org/dist/v10.16.0/win-x64/node.exe

然后再拷贝到D:\parent-boot-vue\construction-data\node目录去替换原来的node.exe文件,再次运行就完美。

ps:因为网络原因,可能执行命令时卡顿、报错,可以多尝试执行几次。

错误二、父工程找不到子工程的问题

我最开始没有将子工程放到父工程的目录下,所以打包时找不到子工程,后面将子工程进行拷贝问题就解决了。

错误三、index.html没有被拷贝的问题

后端maven配置错误,没有配置正确的源地址和目标地址,画红线的地方一定要注意

f8ae0a7f699b0b34afcb4c3a39f81841.png

五、frontend-maven-plugin插件的扩展

这个插件不仅仅支持node+npm,还支持node+yarn。

ui项目的pom.xml文件

```html
<?xml  version="1.0" encoding="UTF-8"?>

    
        com.example
        boot-vue-parent
        1.0-SNAPSHOT
    
    4.0.0

    boot-ui

    
        UTF-8
        UTF-8
        1.8
        1.7.6
    

    
        
            
            
                
                
                
                
                    
                        
                        
                            
                        
                        
                            
                            
                        
                    
                    
                    
                        
                        
                            
                        
                        
                        
                            
                        
                    
                    
                    
                        
                        
                            
                        
                        
                            
                        
                    
                
            
            
            
                com.github.eirslett
                frontend-maven-plugin
                ${frontend-maven-plugin.version}
                
                    
                        install node and yarn
                        
                            install-node-and-yarn
                        
                        generate-resources
                        
                            v10.16.0
                            v1.13.0
                        
                    
                    
                    
                        yarn install
                        
                            yarn
                        
                        
                            install
                        
                    
                    
                    
                        yarn run build
                        
                            yarn
                        
                        
                            run build
                        
                    
                
            
        
    
```

一定要多看报错日志,不能轻言放弃!

面对敌人的严刑逼供,我一个字也没说,而是一五一十写了下来。

最后,非常感谢小LUA大大帖子对我的帮助,没有你的指引,我是无法完成这个配置的。也感谢dubbo-admin项目,大家可以参考该项目的配置。其实上面的配置都是从该项目中拷贝过来的,哈哈。

打包命令:mvn clean package -Dmaven.test.skip=true

参考资料:

  1. https://www.cnblogs.com/LUA123/p/11189069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值