Idea下通过maven生成jar包踩坑记录

背景: 一个java应用,需要再centos上运行,思路是通过脚本来启动,
首先需要将java应用打成jar包,方式是通过maven来操作,然后编译报错

排查配置:

  • File ->Setting -> Build,Execution,Deployment ->Compiler->Java Compiler
    Project bytecode version ,Per-Module bytecode version
    最好跟本机安装的保持一致,这边 都写成8


    image-20210113135400798.png
  • File ->Project Structure ->Project Setting -> Project
    Project SDK, Project language level
    需要跟本机安装的保持一致,这边 都写成8


    image-20210113140242628.png
  • 编译时候,发现 问题1 处的 bytecode version经常会改变,这时候需要排查下pom.xml文件,如下图中的source,target需要写成对应的,这边之前一直没注意,写的都是1.5/1.6,编译时候总是提示 ‘java: -source 1.6 中不支持’


    image-20210113142138416.png
  • 运行jar包的时候,
    1 .提示ClassNotFoundException, 这个class 是第三方的jar包中的类,排查了下了对应路径下没有jar包,直接复制到jar包目录下,我这是lib,新的脚本命令是java -cp lib/ -jar 目标.jar

  1. 提示xxx 中没有主清单属性 ,需要在pom.xml文件中 配置 标签指定对应的启动类即可


    image-20210113145414036.png
  • 这边有kotlin写的类,直接用idea自带的maven package脚本不行,需要加上 kotlin:compile
    clean+package的命令是 mvn clean kotlin:compile package -Dmaven.test.skip=true
    有kotlin文件,编译的速度会慢了一点,klass ->class ?
  • 生成的jar包 包含依赖的第三方jar包
        
                maven-assembly-plugin
                
                    false
                    
                    
                        
                            包名+启动类名
                        
                        
                            .
                        
                    
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly 
                        package 
                        
                            single
                        
                    
                
            

我这边遇到一个问题,因为使用的第三方jar包是本地生成的,在生成的可执行jar包中调用总是提示classNotFoundExcetion...
排查了下,生成的jar包中,没有本地第三方的jar包类文件,其他引用到的第三方仓库类都有,于是把引用的本地第三方jar包放在本地仓库,pom文件中dependency下,问题解决。
引用的本地第三方jar包放在本地仓库的命令格式:

mvn install:install-file -Dfile=本地第三方包名.jar -DgroupId=com.aa.bb -DartifactId=hello -Dversion=1.0 -Dpackaging=jar

我是通过把本地jar包放到本地仓库下解决了这个问题。

你可能感兴趣的:(Idea下通过maven生成jar包踩坑记录)