• error20221125--ssm项目用maven打包报错“找不到程序包 java.lang”或者“程序包javax.crypto不存在”,以及解决方案


    svn拉的ssm项目,写完代码准备发测试;结果用maven打war包的时候报错了
    在这里插入图片描述
    这个时候在控制台找到报错信息如下图
    在这里插入图片描述
    说“在类路径或引导类路径中找不到程序包 java.lang”;
    我寻思着,java.lang不是jdk中基础的包吗?不应该有问题啊,于是上网搜,网上说:
    是因为有多个JDK版本或者JDK版本引入混乱导致的

    解决方法是在报错模块下的pom.xml中,把

    <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>
    
    • 1

    这一行注掉。

    我照做了,但是打包还是报错,如下
    在这里插入图片描述
    于是,我又搜“程序包javax.crypto不存在”,这回找到的回答比较靠谱(原文)。
    他说, maven项目如果用到JDK内部的一些类、接口(例如:javax.crypto.SecretKey)尤其是做加密的时候,用maven编译可能会出现“程序包javax.crypto不存在”的错误。
    这时候需要在编译的时候引入jdk的rt.jar包(就是前面让注掉的那行)。
    这个时候,重点来了:如果引用多个jar需要使用;(windows环境)或者:(macos与linux环境)来分割;这就是打包报错的原因,我是在windows环境,而代码中用:分隔,所有打包报错。

    总结一下就是:

    1、因为项目用到JDK内部的一些类、接口(例如:javax.crypto.SecretKey)尤其是做加密的时候,用这些jdk内部类导致maven编译可能会出现“程序包javax.crypto不存在”的错误。
    
    2、于是为了解决这个问题,需要在pom文件中引入jdk的rt.jar,而且可能需要引入多个。
    <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>
    
    3、当引入多的时候,它们之间需要分隔符,但是不同环境下分隔符不一样,于是就可能导致有的环境可以正常编译,有点环境就会报错。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决方式就是
    1)根据自己的环境选择对应的分隔符;

    2)或者一劳永逸,各位共同开发的同事都省事,就是使用变量path.separator代替

    <bootclasspath>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar</bootclasspath>
    
    • 1
  • 相关阅读:
    【Lua 入门基础篇(三)】流程控制&函数&ipairs&pairs
    【历史上的今天】4 月 28 日:人工智能理论之父出生;大众点评上线;苹果开设 iTunes 音乐商店
    k8s-pod管理 3
    AntV/G2 柱状图+折线图双轴图表
    solidity 合约转java
    思迈特软件Smartbi完成C轮融资,推动国产BI加速进入智能化时代
    js--事件流、事件委托、事件阶段
    多线程的创建
    Network(三)动态路由与ACL配置
    Python入门——yield生成器和iter迭代器
  • 原文地址:https://blog.csdn.net/Derek7117/article/details/128043085