• 请不要在回答技术问题时复制粘贴 AI 生成的内容
donething
V2EX  ›  程序员

求救, Spring Boot 开发中, idea 怎么引入本地 jar 包啊??

  •  
  •   donething · Jul 13, 2017 · 9072 views
    This topic created in 3301 days ago, the information mentioned may be changed or developed.
    • 构建工具是 gradle,尝试在 resources/static 下新建 lib 目录,放入 jar 包,然后右键点击 as a library。
    • 结果是在代码中可以使用这个 jar 库,但是当程序运行到引用的地方时,就会报错:java.lang.NoClassDefFoundError。
    • 请问,到底该怎么引用本地 jar 库呢??
    16 replies    2017-10-26 21:38:28 +08:00
    Miy4mori
        1
    Miy4mori  
       Jul 13, 2017 via iPhone
    当然是用 gradle 引入本地 jar 包啦,你的依赖管理和构建都被 gradle 接管了,怎么会有其他方法。
    Sharuru
        2
    Sharuru  
       Jul 13, 2017
    gradle 里面配置 provided 依赖即可。
    Cbdy
        4
    Cbdy  
       Jul 13, 2017 via Android
    scope 选 system
    doing
        5
    doing  
       Jul 13, 2017
    和 spring boot 无关,和你的构建工具 gradle 有关,你添加本地 jar 到本地库,然后配置 gradle 应该就可以了,我没使用过 gradle,使用的是 maven,就是这么搞的,因为 oracle jdbc jar 就是不能从远程库中下载,只好从 oracle 数据库安装目录中找到 jdbc jar 包,添加到 maven 本地库,然后 jar 该怎么添加就怎么添加。
    donething
        6
    donething  
    OP
       Jul 14, 2017
    @doing #5 纯 Java 项目添加 jar 库后 as a library 就可以用,但是这个 web 项目,不知道是不是由于还得打包成 war 的关系,导致一直都是 NoClassDefFoundError 错误。
    然后好长时间都搞不好,现在尝试把库发布到 JCenter 后直接引用了。
    donething
        7
    donething  
    OP
       Jul 14, 2017
    @paledream #3 谢谢,Java 本地项目很好引用,就是 web 项目不会配置,运行到地方后都报 NoClassDefFoundError
    donething
        8
    donething  
    OP
       Jul 14, 2017
    @Miy4mori @Sharuru 谢谢,不过在 gradle 配置里添加"compile fileTree(include: ['*.jar'], dir: 'libs')"还是那个错误。
    关键是写的时候没有问题,运行代码时才报错。不理解是什么情况。
    autulin
        9
    autulin  
       Jul 14, 2017 via Android
    之前用 maven 遇到同样的问题,建议还是将该 jar 包装入本地库,一劳永逸,不然最后打包同样也会有这样的坑
    Rheinmetal
        10
    Rheinmetal  
       Jul 14, 2017 via Android
    打包的问题吧 gradle 开一个普通 java 工程 脱离 gradle 运行 没有依赖也是这个异常 还得手动写个 task 把依赖 jar 包拷贝出来 你这个一样的 war 包打包没把本地依赖放进去呗
    写得时候 有 gradle war 包没有
    mosliu
        11
    mosliu  
       Jul 14, 2017
    我是用 maven,前两天刚刚解决了这个问题。
    当时我显示也在 resource\lib 中引入了包,本地执行错误,打包后就出这个问题。
    检查发现打完包的项目,在 META-INF\MANIFEST.MF 中是不存在引入的所需要的包名,导致的这个问题。
    我的解决办法是将该 jar 加入了本地 maven 库,然后在 repository 中配置本地库,从本地库中获取就可以了。
    mosliu
        12
    mosliu  
       Jul 14, 2017
    使用本地库能打包,可是如果使用 dependency 中 systemPath 配置本地地址却不打包进去,有点奇怪。。
    spice630
        14
    spice630  
       Jul 14, 2017
    你们这些发链接的,有自己试过吗? 如果 google 能解决,我想楼主也不会在这里问了。
    给一个我的方法。
    build.gradle

    repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    mavenLocal()
    mavenCentral()
    }

    把 jar 文件放到 maven 的本地仓库里 比如,~/.m2/repository/org/json/201407

    然后在 dependencies 里引用即可。
    donething
        15
    donething  
    OP
       Jul 15, 2017
    @mosliu #11
    @spice630 #14
    谢谢你们的回复,最后只能这样解决了,打算将类库上传到 JCenter 然后向你们这样引用了。
    jack80342
        16
    jack80342  
       Oct 26, 2017
    这几天翻译了 Spring Boot 最新的官方文档,欢迎👏反馈,https://www.gitbook.com/book/jack80342/spring-boot/details
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1192 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 17:49 · PVG 01:49 · LAX 10:49 · JFK 13:49
    ♥ Do have faith in what you're doing.