zoukankan      html  css  js  c++  java
  • pom里引入lib下的包后编译报 package com.sun.crypto.provider does not exist问题解决

    最近正在迭代开发的一个项目编译安装时出现报“package com.sun.crypto.provider does not exist”的错误,由于本人能力水平有限,也是第一次遇到该问题,来来回回折腾了小半天才解决,故记录下,避免下次再做无用功。

    环境:jdk1.7、maven 3.3.0、spring MVC、git、gerrit、sonar等

    现象:IDEA里代码没有报错,但是在项目目录下执行mvn install就会报错,提示“package com.sun.crypto.provider does not exist”

    问题出现过程:本项目之前为eclipse+svn项目,已稳定运行一年有余,没有问题,最近迁移到git+gerrit+sonar代码检查 环境。代码迁移新环境后,sonar检查报100多个bug,由于出现bug的代码不是本人写的,是同事在网上找的一个开源的方案来修改的,代码检查bug很多无法入库

    开源代码地址:https://github.com/haifengl/smile
    
    在此吐槽下这个开源代码,sonar显示110多个bug,大部分都是除数可能为0的问题,甚至还有10几处代码写死为 double a = xxxx/0.0的代码块,而且众多使用该方案的朋友都没有提出问题,整个方案几十上百个类,我看过sonar报错的类,几乎都没有看到有try...catch异常处理的逻辑,不解,为何代码能正常运行
    View Code

    改了60多个bug,后来担心改动多多少少会影响到程序逻辑,既然之前都能运行,干脆就不该,改用将该部分代码打包为jar,引入到工程里,以避开sonar检查的方案。步骤如下:

      1、在idea的当前项目下新建一个modual,取名smile(开源代码的包名),将smile相关的代码整个目录复制到该工程中,解决相关的依赖报错等问题后,将该module编译为jar包(具体过程可以百度,有需要后面再单独描述)

      2、将smile.jar放入当前项目的lib文件夹下

      3、在工程中使用add to buid path(eclipse,idea为再Project Structure里添加libraries)方式引入(问题出在这里,应该使用pom添加依赖引入)

     至此成功将smile打成jar包并引入工程。idea不报错,代码没有飘红。然后编译代码打包,报错说smile包的相关代码符号不存在,经过百度后,在pom中编译插件配置里添加如下配置(这也是网上大部分朋友对该问题给出的解决办法)

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
              <source>1.7</source>
              <target>1.7</target>
              <encoding>UTF-8</encoding>
              <compilerArguments>
                   <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
              </compilerArguments>
         </configuration>
    </plugin>

      再次编译,smile包的问题解决,但是又出现报错“ package com.sun.crypto.provider does not exist”,因为有个DesUtils的工具类用到了com.sun.crypto.provider里的代码。

    再次百度,常见的结果如下:

      

    程序包com.sun.crypto.provider不存在的错误 - howard789的博客 - CSDN博客  https://blog.csdn.net/howard789/article/details/80040430
    
    mavne工程运行报错:软件包javax.crypto 不存在解决办法 - wangliutao1的专栏 - CSDN博客  https://blog.csdn.net/wangliutao1/article/details/53997357
    
    maven install 时提示“程序包 javax.crypto不存在” - weixin_34043301的博客 - CSDN博客  https://blog.csdn.net/weixin_34043301/article/details/86228858 ....

    但都和我的情况有些差别,第一个朋友表示是jdk版本问题,但是我的jdk本来就是1.7的,且在代码里这个报错的包是存在的,代码也没有飘红,点击也可以导航。

    按照第二个朋友的方式设置添加bootclasspath配置,可行,但上传到git后,sonar检查不过(提示不能写死路径,不便于协同开发),不允许这种写法。

      

    结果:

      经过反复试验,发现,(在我这次的环境下,其他人不一定)只要添加了"<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>"这个配置,就会报这个错。去掉后报smile包找不到。但smile包找不到是因为我使用的add to build path方式引入,导致只是在开发工具中有效,mvn编译时其实是没有引入该包的。

    最终办法,将smile包加入到依赖中,去掉extdirs的配置。这样两个问题都不报了。

    总结: 问题都是由于自己对maven的经验不足,maven的原理不够理解。导致自己走了半天的冤枉路。

    遗留问题:smile包使用本地systemPath方式在pom里添加的依赖,仍然过不了sonar的检查,需要将smile包加入到maven仓库中。

    
    
  • 相关阅读:
    python线程池ThreadPoolExecutor用法
    redis学习笔记
    selenium + chrome 被检测,反反爬小记
    RabbitMQ单机快速安装使用
    NFS配置使用
    通过Rsync实现文件远程备份
    MySQL笔记-高可用方案
    Redis主从同步、哨兵模式、集群模式配置
    Redis维护笔记
    MongoDB笔记03——分片集群
  • 原文地址:https://www.cnblogs.com/parker-yu/p/11053066.html
Copyright © 2011-2022 走看看