V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
donething
V2EX  ›  程序员

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

  •  
  •   donething · 2017-07-13 20:48:28 +08:00 · 8482 次点击
    这是一个创建于 2688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 构建工具是 gradle,尝试在 resources/static 下新建 lib 目录,放入 jar 包,然后右键点击 as a library。
    • 结果是在代码中可以使用这个 jar 库,但是当程序运行到引用的地方时,就会报错:java.lang.NoClassDefFoundError。
    • 请问,到底该怎么引用本地 jar 库呢??
    16 条回复    2017-10-26 21:38:28 +08:00
    Miy4mori
        1
    Miy4mori  
       2017-07-13 20:57:16 +08:00 via iPhone
    当然是用 gradle 引入本地 jar 包啦,你的依赖管理和构建都被 gradle 接管了,怎么会有其他方法。
    Sharuru
        2
    Sharuru  
       2017-07-13 21:15:20 +08:00
    gradle 里面配置 provided 依赖即可。
    Cbdy
        4
    Cbdy  
       2017-07-13 21:37:43 +08:00 via Android
    scope 选 system
    doing
        5
    doing  
       2017-07-13 21:42:44 +08:00
    和 spring boot 无关,和你的构建工具 gradle 有关,你添加本地 jar 到本地库,然后配置 gradle 应该就可以了,我没使用过 gradle,使用的是 maven,就是这么搞的,因为 oracle jdbc jar 就是不能从远程库中下载,只好从 oracle 数据库安装目录中找到 jdbc jar 包,添加到 maven 本地库,然后 jar 该怎么添加就怎么添加。
    donething
        6
    donething  
    OP
       2017-07-14 00:01:57 +08:00
    @doing #5 纯 Java 项目添加 jar 库后 as a library 就可以用,但是这个 web 项目,不知道是不是由于还得打包成 war 的关系,导致一直都是 NoClassDefFoundError 错误。
    然后好长时间都搞不好,现在尝试把库发布到 JCenter 后直接引用了。
    donething
        7
    donething  
    OP
       2017-07-14 00:04:42 +08:00
    @paledream #3 谢谢,Java 本地项目很好引用,就是 web 项目不会配置,运行到地方后都报 NoClassDefFoundError
    donething
        8
    donething  
    OP
       2017-07-14 00:08:04 +08:00
    @Miy4mori @Sharuru 谢谢,不过在 gradle 配置里添加"compile fileTree(include: ['*.jar'], dir: 'libs')"还是那个错误。
    关键是写的时候没有问题,运行代码时才报错。不理解是什么情况。
    autulin
        9
    autulin  
       2017-07-14 02:23:25 +08:00 via Android
    之前用 maven 遇到同样的问题,建议还是将该 jar 包装入本地库,一劳永逸,不然最后打包同样也会有这样的坑
    Rheinmetal
        10
    Rheinmetal  
       2017-07-14 08:05:19 +08:00 via Android
    打包的问题吧 gradle 开一个普通 java 工程 脱离 gradle 运行 没有依赖也是这个异常 还得手动写个 task 把依赖 jar 包拷贝出来 你这个一样的 war 包打包没把本地依赖放进去呗
    写得时候 有 gradle war 包没有
    mosliu
        11
    mosliu  
       2017-07-14 08:10:00 +08:00
    我是用 maven,前两天刚刚解决了这个问题。
    当时我显示也在 resource\lib 中引入了包,本地执行错误,打包后就出这个问题。
    检查发现打完包的项目,在 META-INF\MANIFEST.MF 中是不存在引入的所需要的包名,导致的这个问题。
    我的解决办法是将该 jar 加入了本地 maven 库,然后在 repository 中配置本地库,从本地库中获取就可以了。
    mosliu
        12
    mosliu  
       2017-07-14 08:11:44 +08:00
    使用本地库能打包,可是如果使用 dependency 中 systemPath 配置本地地址却不打包进去,有点奇怪。。
    spice630
        14
    spice630  
       2017-07-14 18:14:56 +08:00
    你们这些发链接的,有自己试过吗? 如果 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
       2017-07-15 00:47:25 +08:00
    @mosliu #11
    @spice630 #14
    谢谢你们的回复,最后只能这样解决了,打算将类库上传到 JCenter 然后向你们这样引用了。
    jack80342
        16
    jack80342  
       2017-10-26 21:38:28 +08:00
    这几天翻译了 Spring Boot 最新的官方文档,欢迎👏反馈,https://www.gitbook.com/book/jack80342/spring-boot/details
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5681 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:34 · PVG 10:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.