`
zhang_xzhi_xjtu
  • 浏览: 524437 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jar的混乱

阅读更多
使用了一阵.net之后回到java上,发现jar包的维护真可以用梦魇来形容。一个class可以有n个jar包,实现的功能差不多,但是又有可能有一些细微的偏差。包含该class的jar有可能是满足当前需要的一个小jar包,也有可能不仅包含该class及其相关的class,还有一堆其他功能的class堆积在这个大的jar包里。有可能当前好好的,以后加入新功能时就有问题了,因为classloader误用了大jar包的同名class。另外,如果不是很熟悉classpath,有可能build时好好的,运行时就有问题了。

java的开放性太高了,任何人,任何组织只要高兴就可以搞一堆jar出来,可以jar名相同内容近似或不同,可以jar名不同内容一样等等等等等等等。基本上一个常用的class都是有n多实现的。其实反转域名的namespace加上classname是一个挺好的方案,可惜没有强制的规定如何打jar包。既一个全名的class在一个基本jar里,不可能存在其他的基本jar里面有同名的class,为了性能或者其他一些情况,可以有一些组合jar,组合jar是基本jar的聚集,不允许只包含一个基本jar的一部分,一个组合jar是一组基本jar的聚集,并且该范围不可改变。

java的jar引用问题。最近用maven,有时候挺不爽的。maven的repo声称解决了jar的管理问题。但是我觉得还是不够的。java的jar往好里说,是很灵活的,基本上想用什么class都可以自己设定,实在不行还可以自定义classloader。往不好里说,完全是自己给自己找麻烦,一个系统上jre,jdk现在都是几套几套的,里面的jar没有重复?估计没有几个人因为空间不够愿意和其他程序共享自己依赖的jar包。所以maven的一个版本的jar只有一个copy到底好不好还是有待商榷的。

倒是.net的模式我觉得挺好的,build是把该dll依赖的dll全部copy到本地目录,除了GAC之外,这样虽然浪费一些空间,但是很整洁,一眼就知道,程序在用什么jar,而且避免了很多classpath设置的错误,以及jar次序的错误。
1
0
分享到:
评论
2 楼 zhang_xzhi_xjtu 2009-05-26  
简单的说我用java比.net时间长,而且更喜欢java一些。.net当然没有java开放了,文中已经提到。
这个不是比较java和.net的优劣,而且探讨一下jar本身的问题。
1 楼 xwkp2008 2009-05-26  
只能说因为你用.net习惯了,.net具备了java的开放性了吗?

相关推荐

    swagger2生成PDF编码混乱处理.zip

    这个jar包可以用来覆盖本地maven仓库的官方jar包,以此来解决swagger2生成的PDF文档中文乱码,或者中文不全的问题。使用方法:下载下来的jar包,名字改成和官方一样的asciidoctorj-pdf-1.5.0-alpha.16.jar,然后复制...

    ansible-javax:Ansible模块,用于执行任意java类或jar

    用于以更简洁,更类似于Ansible的方式执行任意java类或jar的模块。 使用命令或外壳模块在Ansible中运行基本Java应用程序非常容易且相对简单。 当您的应用程序需要各种选项(例如最大堆大小或线程堆栈)并且具有...

    JAR-加密资源清单详情包

    Java 混淆器的作用是对编译好的代码进行混淆,使得反编译后的代码混乱难懂,真正起的作用只是增加了逆向工程的难度,最终结果也是治标不治本,对于一些掌握工具的人来说几乎还是透明的。另外由于 Java 程序中会有...

    springframework体系结构及内部各模块jar之间的maven依赖关系

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道...

    java混淆器 RetroGuard

    Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。 这里我...

    classworlds

    基于java操作类装载的开发框架。java的classloader的机制和本地类可以引起头痛,多为某些类型的应用程序开发的混乱。

    maven入门到精通

    在 Java世界中我们很多的开发人员选择用 Ant来构建项目,一个 build.xml能够完成编译、测试、打包、部署等很多任务,但我们也碰到了很多的问题,如 jar文件管理混乱,各个项目结构和 build.xml相差很大等等。...

    Android-Method-Swizzling

    Android方法混乱 Android Studio从位于/build/outputs/aar/.aar下的模块生成aar文件 从aar提取jar文件:使用存档管理器时打开aar,而aar文件包含classes.jar文件。 一旦classes.jar文件包含所有需要的* .class文件,...

    Eclipse中配置tomcat的方法

    网上讲述在Eclipse中配置tomcat的方法过于混乱,这是更清晰的在Eclipse中配置tomcat的方法。

    混沌测试:基于VLINGOCLUSTER的简单应用程序,用于混沌测试

    这是一个为混乱测试目的而创建的简单演示应用程序。 基于VLINGO / CLUSTER,它最多支持三个节点,并且至少在两个运行正常的节点运行时达到法定人数。 执行 首先,使用Maven构建应用程序: mvn clean package 然后,...

    springframework核心框架体系结构

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道...

    spring-framework-4.2.0.RELEASE.zipspring-framework-4.2.0.RELEASE.zip

    spring的框架JAR包,包含全部,很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次...

    SSH架构源码样例借鉴

    希望借鉴完善的SSH框架,但在下载后,发现很多开源出的 SSH项目组搭建运行过程中,有很多问题,比如没有Maven管理导致第三方jar文件引用混乱,或部分代码/配置异常,等等。种种原因导致SSH源码参 考和运行颇费了一番...

    「文件夹名称筛选工具 - 简单实用的Java小工具」

    该工具包含了Java源代码、打包好的jar文件以及一个批处理文件,用户只需安装有JDK,并点击批处理文件即可运行工具。 使用该工具,您可以轻松地识别出父文件夹中命名重复的子文件夹,避免文件混乱和冲突。它提供了...

    深入理解Android之Gradle.pdf

    app 如果涉及到多个开发者,手动操作必然会带来混乱。  library 工程我们需要编译成jar 包,然后发布给其他开发者使用。以前是用 eclipse 的export,做一堆选择。要是能自动编译成jar 包就爽了。 上述问题对绝大...

    testlinkconvert

    目前testlink只支持导出xml文档,xml可以使用excel打开,但是格式非常混乱,故本人用java开发了该工具。 该工具的功能: 1. 从testlink中导出测试套件或测试用例(xml文件),使用上述工具将xml文件转换成格式合适的...

    AndroidKiller_v1.3.1

    android 反编译工具,集成apktool,dex2jar,jd-gui,一键傻瓜式操作 PS:混淆后的APK反编译肯定会发生类名混乱 android studio Instant Run 方式生成的APK反编译会找不到源码

    android-unused-resources:Andround Unused Resources 是一个 Java 应用程序,它将扫描您的项目以查找未使用的资源。 未使用的资源会不必要地占用空间、增加构建时间并使 IDE 的自动完成列表变得混乱。 要使用它,请确保您的工作目录是 Android 项目的根目录,然后运行

    附加功能自动删除未使用的资源修改为 android studio 的项目也可以使用 (2014.12.08) 如何使用java -Dfile.encoding=UTF-8 -jar AndroidUnusedResources.jar [项目根路径] [自动删除选项 true | 错误的] 资源通常...

Global site tag (gtag.js) - Google Analytics