Java的“静态库链接”

 我来答
新科技17
2022-10-09 · TA获得超过5906个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:75万
展开全部

  Java的库组织方式就是 动态链接 的 从一个Java的jar包运行有可能要接一堆classpath就知道 和基于静态链接的C语言要实现动态链接要做额外的事情相似 Java要想实现类似C的静态链接也要做很多额外的事

  用类似Fat Jar的方法 把所有的依赖库打包的最后的库中 其实不是静态链接——C的静态链接只把需要的代码复制过来 不是眉毛胡子一把抓 按说 以Java的思想 静态链接不是很必要 因此也就没有原生支持 但实践和理论毕竟差距很远 不是每个库都是标准库 假设你从别人的库中引用了几个类 为了支持你的程序 你必须提供别人的库(假设这个库并不流行) 再假设你自己写了一个库 以后再开发类似的程序就从库中派生 当然你不想把所有的代码都发行出去 这个问题在Netbeans上更为明显 Netbeans提供了一个swing框架 用起来当然很方便 但是当发行程序的时候你就会发现 Netbeans很负责任的把依赖库放到发行目录的lib下 居然有将近 M (禁掉粗口) 光写一个窗口就要 M!

  ProGuard不光是个混淆器 它也能解决静态链接的问题 用它自己的话说是 It detects and removes unused classes fields methods and attributes 下面给出的是在Netbeans中用的Ant脚本 修改项目的build xml 添加

  <target name= post jar >           <taskdef resource= proguard/ant/task properties classpath= ${libs proguard classpath} />           <copyfile src= ${dist jar} dest= ${dist dir}/pre jar />           <proguard warn= false obfuscate= false >               <libraryjar path= ${java home}/lib/rt jar />               <injar path= ${javac classpath} filter= !META INF/MANIFEST MF />               <injar path= ${dist dir}/pre jar />               <outjar path= ${dist jar} />               <keep name= ${main class} >                   <method name= main />               </keep>               <keep name= jdesktop bean *** inding ext BeanAdapterProvider />               <keepclasseswithmembernames>                   <method name= getServiceNames />               </keepclasseswithmembernames>               <keepclasseswithmembernames>                   <method name= addPropertyChangeListener />               </keepclasseswithmembernames>           </proguard>       </target>

lishixinzhi/Article/program/Java/hx/201311/26546

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式