当前位置: 首页 > news >正文

昆明网站优化建设企业建设网站的方式有两种

昆明网站优化建设,企业建设网站的方式有两种,企业网站搭建方案,wordpress mu 中文dot2谜团png面对一个好老问题 我在应用程序服务器上遇到一些类加载问题。 这些库被定义为Maven依赖项#xff0c;因此被打包到WAR和EAR文件中。 不幸的是#xff0c;其中一些还安装在应用程序服务器中#xff0c;但版本不同。 启动应用程序时#xff0c;我们遇到了与这些类… dot2谜团png 面对一个好老问题 我在应用程序服务器上遇到一些类加载问题。 这些库被定义为Maven依赖项因此被打包到WAR和EAR文件中。 不幸的是其中一些还安装在应用程序服务器中但版本不同。 启动应用程序时我们遇到了与这些类型的问题相关的各种异常。 如果您想深入了解那么有一篇不错的IBM文章介绍了这些异常。 即使我们知道该错误是由类路径上的某些双重定义的库引起的但仍花了两个多小时来调查我们真正需要的版本以及要删除的JAR。 同一周在水罐上偶然发生相同的话题 几天后我们参加了“您真的得到了Classloaders吗 苏黎世Java用户协会会议。 Simon Maple对类加载器进行了非常出色的介绍并从一开始就介绍了非常深入的细节。 对于许多人来说这是一次令人大开眼界的会议。 我还必须注意Simon工作零周转他为JRebel进行宣传。 在这种情况下辅导课程通常偏向于实际产品即辅导员的面包。 在这种情况下我认为西蒙绝对是绅士和道德主义者保持适当的平衡。 创建一个工具解决神秘问题 只是为了创造另一个 一周后我花了一些时间来学习程序而现在我已经有几个星期没有时间了所以我决定创建一个小工具列出所有在类路径上的类和JAR文件以便可以更轻松地进行调查。重复。 我试图依靠这样的事实即类加载器通常是URLClassLoader实例因此可以调用getURLs()方法来获取所有目录名称和JAR文件。 在这种情况下单元测试可能非常棘手因为该功能与类加载器的行为密切相关。 务实的是我决定只做一些从JUnit开始的手动测试只要代码是实验性的即可。 首先我想看看这个概念是否值得进一步发展。 我打算执行测试并查看报告没有重复类的日志语句然后执行相同的运行但是第二次向类路径添加一些冗余依赖项。 我使用的是JUnit 4.10在这种情况下该版本很重要。 我从命令行执行了单元测试发现没有重复的类我感到很高兴。 之后我从Eclipse执行了相同的测试并且感到惊讶我冗余定义了21个类 12:41:51.670 DEBUG c.j.c.ClassCollector - There are 21 redundantly defined classes. 12:41:51.670 DEBUG c.j.c.ClassCollector - Class org/hamcrest/internal/SelfDescribingValue.class is defined 2 times: 12:41:51.671 DEBUG c.j.c.ClassCollector - sun.misc.Launcher$AppClassLoader7ea987ac:file:/Users/verhasp/.m2/repository/junit/junit/4.10/junit-4.10.jar 12:41:51.671 DEBUG c.j.c.ClassCollector - sun.misc.Launcher$AppClassLoader7ea987ac:file:/Users/verhasp/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar ... 仔细研究一下我可以很容易地发现JUnit 4.10具有额外的依赖关系如maven所示 $ mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building clalotils 1.0.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) clalotils --- [INFO] com.verhas:clalotils:jar:1.0.0-SNAPSHOT [INFO] - junit:junit:jar:4.10:test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.1:test [INFO] - org.slf4j:slf4j-api:jar:1.7.7:compile [INFO] \- ch.qos.logback:logback-classic:jar:1.1.2:compile [INFO] \- ch.qos.logback:logback-core:jar:1.1.2:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.642s [INFO] Finished at: Wed Sep 03 12:44:18 CEST 2014 [INFO] Final Memory: 13M/220M [INFO] ------------------------------------------------------------------------ 这实际上在4.11中已修复因此如果我将依赖关系更改为JUnit 4.11则不会遇到此问题。 好。 一半的谜团解决了。 但是为什么maven命令行执行未报告双重定义的类 扩展日志记录越来越多的日志记录我可以发现一条线 12:46:19.433 DEBUG c.j.c.ClassCollector - Loading from the jar file /Users/verhasp/github/clalotils/target/surefire/surefirebooter235846110768631567.jar 这个文件里有什么 让我们解压缩它 $ ls -l /Users/verhasp/github/clalotils/target/surefire/surefirebooter235846110768631567.jar ls: /Users/verhasp/github/clalotils/target/surefire/surefirebooter235846110768631567.jar: No such file or directory 该文件不会退出 看来maven创建了这个JAR文件然后在测试执行完成后将其删除。 再次谷歌搜索我找到了解决方案。 Java从类路径加载类。 可以在命令行上定义类路径但是应用程序类加载器还有其他来源可以从中获取文件。 一个这样的源是JAR的清单文件。 JAR文件的清单文件可以定义执行JAR文件中的类所需的其他JAR文件。 Maven创建一个JAR文件除了清单文件定义清单中列出了JAR和列出类路径的目录外该文件不包含其他内容。 这些JAR和目录不是由getURLs()方法返回的因此我的小工具第一个版本没有找到重复的对象。 出于演示目的我足够快地在运行mvn test命令时制作了该文件的副本并获得以下输出 $ unzip /Users/verhasp/github/clalotils/target/surefire/surefirebooter5550254534465369201\ copy.jar Archive: /Users/verhasp/github/clalotils/target/surefire/surefirebooter5550254534465369201 copy.jarinflating: META-INF/MANIFEST.MF $ cat META-INF/MANIFEST.MF Manifest-Version: 1.0 Class-Path: file:/Users/verhasp/.m2/repository/org/apache/maven/surefire/surefire-booter/2.8/surefire-booter-2.8.jar file:/Users/verhasp/.m2/repository/org/apache/maven/surefire/surefire-api/2.8/surefire-api-2.8.jar file:/Users/verhasp/github/clalotils/target/test-classes/ file:/Users/verhasp/github/clalotils/target/classes/ file:/Users/verhasp/.m2/repository/junit/junit/4.10/junit-4.10.jar file:/Users/verhasp/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar file:/Users/verhasp/.m2/repository/org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar file:/Users/verhasp/.m2/repository/ch/qos/logback/logback-classic/1.1.2/logback-classic-1.1.2.jar file:/Users/verhasp/.m2/repository/ch/qos/logback/logback-core/1.1.2/logback-core-1.1.2.jar Main-Class: org.apache.maven.surefire.booter.ForkedBooter$ 实际上除了定义类路径的清单文件外别无其他。 但是为什么Maven会这样做呢 索纳型人我个人也认识一些聪明的人。 他们不会白白做任何事情。 创建临时JAR文件以启动测试的原因是 在某些类路径长度可能超过的操作系统上 命令行的长度受到限制 。 即使Java自Java 6起本身可以解析类路径中的通配符 也不是maven的选择。 JAR文件位于Maven存储库中的不同目录中每个目录都有长名称。 通配符解析不是递归的这有充分的理由即使是通配符解析您也不希望将所有本地存储都放在类路径中。 结论 不要使用JUnit 4.10 使用旧的或较新的东西或为意外做好准备。 了解什么是类加载器以及它如何工作做什么。 使用对命令行长度的最大大小有极大限制的操作系统。 或只是忍受限制。 还有吗 你的想法 翻译自: https://www.javacodegeeks.com/2014/09/a-classloading-mystery-solved.htmldot2谜团png
http://www.yutouwan.com/news/307349/

相关文章:

  • 湖北响应式网站建设设计se 网站优化
  • 北京市违法建设投诉网站首码项目推广网站
  • 网站建设公司怎么开拓业务如何做英文版网站
  • 什么学做网站来安县城乡规划建设局网站
  • 网站流量统计软件广州化妆品网站建设
  • 汉口网站制作企业简介ppt模板免费
  • 一个最简单的产品展示的asp网站应该如何做做宠物食品的网站
  • 温州建站模板搭建怎么样能够为一个网站做推广
  • 机关单位网站管理部门应建立宁波专业的网站建设团队
  • 上海专业网站制作公司黄岛网站建设哪家专业
  • wordpress外贸建站燕郊网站建设
  • 外贸流程全步骤 外贸篇北京网站推广优化公司
  • 标题正文型网站网站关闭了域名备案
  • 购物网站一般分几大模块长春代做网站
  • 上海网站建设 分类广告网站首页设计收费
  • 做阿里巴巴网站口碑wordpress 婚庆主题
  • 网站建设设计技术方案模板微信公众号怎么搞
  • 天津在线制作网站wordpress 文章下载
  • j2ee大型网站开发框架qq空间网站
  • 深圳最新政策网站优化公司哪个好
  • 网站开发需要人员抖音代运营商家谈判话术
  • 网站建设作业百度云资源安卓开发程序
  • 铁岭做网站公司哪家好宁波网站制作价格
  • 哪些网站的做的好看柬埔寨网站开发
  • 怎样介绍自己做的网站建设部监理工程师考试网站
  • 京东网站开发需求网站推广优化网址
  • 萧山网站建设xsszwl网站版面如何设计
  • 网站里添加百度地图建设推广型网站
  • 张家口网站建设价格霸屏推广
  • 做网站建设的公司有哪些内容北京欢迎您网站建设