验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

windows系统怎么使用mvn命令打包并指定jdk路径

阅读:616 来源:乙速云 作者:代码code

windows系统怎么使用mvn命令打包并指定jdk路径

      使用mvn命令打包并指定jdk路径

      使用背景:我本机安装配置的是jdk17,从网上拉取下来的项目使用的是jdk1.8,直接运行或者打包的话会报错。

      IDEA

      idea中可以切换jdk,setting -> project structure -> project中 配置好新下载安装好的jdk1.8的安装路径即可。

      windows系统怎么使用mvn命令打包并指定jdk路径

      不打开IDEA,直接使用命令进行打包

      新建一个txt文件,编写以下内容

      set JAVA_HOME=xxx 仅仅是设置临时环境变量,不修改实际的。

      set JAVA_HOME=C:UserskekePang.jdkscorretto-1.8.0_322
      mvn clean package

      保存文件,重命名为 package.bat

      最后将该执行文件拷贝到要打包的maven项目根目录下,双击运行bat文件即可实现在jdk1.8环境下的正常打包。

      我们Ctrl+R打开命令窗口,输入java -version,当前java版本还是17.

      windows系统怎么使用mvn命令打包并指定jdk路径

      MVN打包报错:在类路径或引导类路径中找不到程序包 java.lang

      现象

      同一个Springboot项目在windows下mvn打包正常,在linux下打包就失败了。

      打包命令如下 :

      mvn clean package -Dmaven.test.skip=true

      然后Linux中的其他项目打包也正常,就是这个项目不正常。

      报错日志

      key/.m2/repository/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar,/home/itkey/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar,.]
      致命错误: 在类路径或引导类路径中找不到程序包 java.lang
      [INFO] -------------------------------------------------------------
      [ERROR] COMPILATION ERROR : 
      [INFO] -------------------------------------------------------------
      [ERROR] An unknown compilation problem occurred
      [INFO] 1 error
      [INFO] -------------------------------------------------------------
      [INFO] ------------------------------------------------------------------------
      [INFO] Reactor Summary for wsdm 1.0.0:
      [INFO] 
      [INFO] wsdm ............................................... SUCCESS [  0.201 s]
      [INFO] wsdm-common ........................................ FAILURE [  2.113 s]
      [INFO] wsdm-liantong ...................................... SKIPPED
      [INFO] wsdm-system ........................................ SKIPPED
      [INFO] wsdm-framework ..................................... SKIPPED
      [INFO] wsdm-generator ..................................... SKIPPED
      [INFO] wsdm-rongcloud ..................................... SKIPPED
      [INFO] wsdm-admin ......................................... SKIPPED
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD FAILURE
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time:  2.647 s
      [INFO] Finished at: 2022-04-21T14:58:23+08:00
      [INFO] ------------------------------------------------------------------------
      [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project wsdm-common: Compilation failure
      [ERROR] An unknown compilation problem occurred
      [ERROR] 
      [ERROR] -> [Help 1]
      [ERROR] 
      [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
      [ERROR] Re-run Maven using the -X switch to enable full debug logging.
      [ERROR] 
      [ERROR] For more information about the errors and possible solutions, please read the following articles:
      [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
      [ERROR] 
      [ERROR] After correcting the problems, you can resume the build with the command
      [ERROR]   mvn -rf :wsdm-common

      原因分析

      关键信息致命错误: 在类路径或引导类路径中找不到程序包 java.lang人这里就可以看出应该是编译的时候环境变量有问题。

      我就开始怀疑是不是JDK配置的问题。

      检查了一下JDK1.8配置正常,我还专门把多余的JDK11删除以防混淆。

      结果还是没有作用。

      因为其他项目编译打包是正常的,只是这个项目不正常。我在考虑会不会MVN的某个配置文件不兼容LINUX导致的?

      于是我就对比了一下pom.xml文件的区别发现如下一段

      
          ${java.version}
           ${java.version}
           ${project.build.sourceEncoding}
           
               
               ${java.home}/lib/rt.jar;${java.home}/lib/jce.jar
           
       

      在编译正常的项目中没有这段配置${java.home}/lib/rt.jar;${java.home}/lib/jce.jar

      最终证明真的是这么配置导致的问题的发生。

      解决办法

      配置问题:pom.xml中以下标签中的标签中间配置的jdk的分隔符是不是改错了,

      • window下是英文符号;

      • linux下是英文符号:

      windows

      
      
      ${java.home}jrelibrt.jar;${java.home}jrelibjce.jar
      

      linux

      
      
      ${java.home}jrelibrt.jar:${java.home}jrelibjce.jar
      

      修改完成以后,linux下打包也就正常啦。

      这样处理有一个非常明显的缺点,在不同的环境下打包,打包前要编辑一下这个文件太麻烦了。这样版本管理也难。那么有没有一劳永逸的办法,使一套配置同时支持两个平台呢?

      最优解

      ${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar

      我把;替换成变量${path.separator}了。

      ${path.separator}在windows下就是英文符号;

      ${path.separator}在linux下就是英文符号:

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>