屌丝哥 2010-05-07 20:00
浏览 238
已采纳

分别通过【buildpath】和【lib】倒入JAR包有什么不同???

[size=medium]
分别通过buildpath和lib倒入JAR包有什么不同???
[/size]

  • 写回答

5条回答 默认 最新

  • qwe_rt 2010-05-07 20:50
    关注

    我们可以通过java虚拟机的类加载器来理解。
    通过buildpath设置(或添加)程序使用jar包的classpath。

    Java虚拟机是根据Java ClassLoader(类加载器)决定如何,到那里去加载Class

    我们之所以把jar包放在classPath下,是因为存在ClassPath ClassLoader
    我们之所以可以不再ClassPath指定一些Jar包,但在Java程序中也能使用。
    那是因为有 Root ClassLoader(由C++编写)

    我们之所以把Jar包放入webroot下的lib文件夹,并且可以在我们的程序中使用,那是容器实现了自己的ClassLoader。

    所以说能不能加载Jar,加载哪里的Jar,是根据ClassLoader决定的。
    系统默认提供了3个ClassLoader
    Root ClassLoader -> ClassPathLoader -> ExtClassLoader(用于加载Java虚拟机ext目录下的Jar)

    当然我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。

    你可以去看看ClassLoader的相关介绍(想深入了解java虚拟机的话)。

    Eclipse只是一个开发工具,至于采用导入方式Copy Jar包,还是采用,手动Copy到webroot\lib目录下,都是一样的。
    因为如果你做的是WEB开发的话,不管你是采用Eclipse导入方式还是采用手动拷贝的方式,最后那些Jar都会被放在webroot/lib目录下。

    当然利用Eclipse去导入Jar包也有一些要注意的地方,比如Eclipse下方会有英文的提示信息"是否将Jar包拷贝到WebRoot/Lib"下,如果没有选中,
    你会惊讶的发现我的程序也能运行。。。
    这是因为Eclipse在这种情况下,自动将这个Jar包设置成ClassPath形式了。

    如果换一台机器,你的程序就不能运行了。原因很简单,
    因为不是所以机器都有ClassPath的。也更不会像Eclipse那样,自动的为为程序在启动前设置Jar的ClassPath。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler