【问题标题】:jar class file vs local class with same name and packagejar 类文件与同名同包的本地类
【发布时间】:2016-04-19 00:02:01
【问题描述】:

我有一个情况,我有 jar 文件,其中包含 com.somepackage.ABC.class文件 我在我的本地工作区创建com.somepackage.ABC.java(相同的名称和包)重写ABC.java 的现有功能 当我运行我的程序时遇到问题,它总是拾取 jar ABC 文件 不是我的本地人。

【问题讨论】:

  • 你是不是要修改jar文件的内容?
  • 如何重新打包 JAR?试试jd.benow.ca 之类的工具,它会帮你轻松搞定
  • 不建议一个类有两个版本,请参阅stackoverflow.com/questions/8994147/…。无论如何,你的问题是什么?
  • 嗨,Jean,同一个 jar 文件有一个名为 ABC 对象的类作为参考。我在本地重写了 ABC 类,所以我正在尝试使用新功能。

标签: java jar packages


【解决方案1】:

你应该尽可能消除包和类名的冲突。只需使用另一个类名(例如DEF)或另一个包名。使用services 之类的机制可以做到这一点。

假设您必须忍受冲突,默认情况下,您的结果将取决于启动 JVM 的 ClassPath。在当前文件夹中将本地 ABC.java 编译为 ABC.class(实际类在 com/somepackage 中)之后,您应该将类​​路径指定为:java -cp ".:path/to/foo.jar(在 Unix 上)或 java -cp .;path\to\foo.jar(在 Windows 上),那么您的本地类将优先于 JAR 文件中的类。

【讨论】:

  • 这可能是个愚蠢的问题,我应该在哪里添加 java -cp .;path\to\foo.jar。我正在使用 tomcat 6
  • 哦,这在您最初的问题中并不明显。见stackoverflow.com/a/1301458/437506。在这种情况下,您需要使用您的ABC.class 版本所在的路径(顶部文件夹),而不是前导的“.”。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2021-05-15
  • 2011-01-26
  • 2020-03-20
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2013-01-09
相关资源
最近更新 更多