java - 如何测试我的 jar 文件是否有任何 Unresolved 依赖项?

标签 java jar dependencies classpath .class-file

我正在编写一个自定义工具来从我们的构建树构建 jar 文件。我们喜欢构建仅包含 .class 的“最小”jar 文件。文件实际上是从“根”类(main() 所在的位置)引用的,依此类推,递归地遵循依赖关系。

从历史上看,我们是通过获取javac来做到这一点的。遵循源依赖关系,但这意味着要多次重新编译公共(public)文件。 (我们从单个源树构建 60 或 70 个不同的应用程序 jar。)我正在编写一个新的构建系统,该系统仅编译每个源文件一次,但这意味着我们需要通过解析 .class 文件来遵循依赖关系。

好消息是,我已经有了可以完成我想要的工作的代码。但我需要绝对确定我没有搞砸,即我想确保我正在构建内部一致的 jar 文件,其中“一致”意味着所有未解析的引用都可以通过以下方式解决:我们已知的第三方 jar 之一。

所以理想情况下我想要一个可以像这样运行的 MagicTool

MagicTool \
  --classpath commons-lang.jar:commons-collections.jar:[...etc...] \
  myapp.jar

这将检查 myapp.jar 中每个未解析的引用并确保它可以通过传递给 --classpath 的第三方 jar 之一来解析。如果没有,呕吐。

最佳答案

最好希望该路径中没有任何内容包含任何类型的反射、forName 等。

我使用depfind (如果我没有使用自己的 Java 洞穴探险工具)它可能会也可能不会以对您有帮助的方式提供输出。 jdepend是另一种选择,尽管我从未将其用于包级依赖项之外的任何其他用途。

其他工具(例如 ProGuard)将删除未使用的类(除其他外),并具有相同的反射警告。

我非常谨慎地尝试创建最小的 jar 文件;存在 yield 递减/风险增加的点。

关于java - 如何测试我的 jar 文件是否有任何 Unresolved 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218338/

相关文章:

java - 尝试替换以/x2D开头的字符串的一部分

java - 解析依赖项时出现 Maven 错误

java - 在计算拍卖中的下一个最低出价时,试图四舍五入到最接近的 5 美元、10 美元、50 美元和 100 美元

java - CloudBees 运行时类路径

java - 如何将 AAR 转换为 JAR

jar - lib/jar 中的类在耳朵中访问 EJB

java - 如何使用 Gradle 在我的 JAR 中包含一个依赖项?

linux - 如何在gerrit中创建 merge 补丁和 merge 补丁之前的依赖关系?

java - 在 PHP 中运行 shell_exec ('which java' ) 什么都不返回

java - Android MediaPlayer seeBar 无法正常工作