java - 一旦触发 main(),如何找到所有被调用的类?
问题描述
我试图找到main()
我所拥有的项目中涉及的每一门课程。我们同时使用Java
和Groovy
with gradle
。这个项目包括许多不同的 jars,它们使用许多不同的main()
方法进行编译。我们正试图拆散这个庞大的项目并将它们全部移动到单独的git
存储库中。目前我们SVN
与 Eclipse IDE 一起使用,并且正在转向git
IntelliJ。
如何找到与我的main()
方法交互的每个类,以便我可以一次复制/提取/剪切它们,或者以类似的方式?那个和唯一接触这个类的main()
类。我们只想从这一庞大的项目组中删除这个项目。
例子:
public static void main(String args[]) {
AClass.init();
BClass.init();
CClass.init();
DClass.init();
}
...
public class AClass {
//calls a number of classes
}
...
public class ABlass {
//calls 15 other classes
}
...etc
我想知道每个main()
调用、AClass
调用、BClass
调用的类,以及在所有其他类中调用其他类的类,这些类与main()
. 这可能吗?我可以使用Eclipse
或IntelliJ
帮助我搜索它们。
解决方案
由于反射,几乎不可能让它完美。当您的应用程序运行时,可以加载更多类。但是您可以尝试添加-verbose:class
到您的启动命令并将其发送到文件并解析结果。这将列出所有加载的类。
您将添加-verbos:class
到运行应用程序的任何位置。下面的屏幕截图在 IntelliJ 中,但无论您在何处运行java
命令,您都可以执行相同的操作。命令行或 IDE。
这会给你这样的输出(很多)。这将比您可能想要的要多得多,但您可以解析它以根据包找到您要查找的内容。
[Loaded java.io.StreamCorruptedException from /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded org.entando.entando.aps.system.init.model.AbstractReport from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.model.DataSourceInstallationReport from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.springframework.core.convert.support.StringToEnumConverterFactory$StringToEnum from file:/Users/josephwhite/.m2/repository/org/springframework/spring-core/5.1.8.RELEASE/spring-core-5.1.8.RELEASE.jar]
[Loaded org.springframework.core.convert.support.ConversionUtils$$Lambda$69/2073333566 from org.springframework.core.convert.support.ConversionUtils]
[Loaded org.springframework.core.NestedExceptionUtils from file:/Users/josephwhite/.m2/repository/org/springframework/spring-core/5.1.8.RELEASE/spring-core-5.1.8.RELEASE.jar]
[Loaded org.entando.entando.aps.system.init.model.InvalidPostProcessResultException from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.model.IPostProcess from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.model.SelfRestCallPostProcess from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded javax.ws.rs.core.Response$StatusType from file:/Users/josephwhite/.m2/repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar]
[Loaded javax.ws.rs.core.Response$Status from file:/Users/josephwhite/.m2/repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar]
[Loaded org.entando.entando.aps.system.services.api.model.ApiMethod from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.cache.IInitializerManagerCacheWrapper from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.model.SystemInstallationReport$Status from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded com.agiletec.aps.system.common.AbstractCacheWrapper from file:/projects/entando/entando-core/engine/target/classes/]
[Loaded org.entando.entando.aps.system.init.cache.InitializerManagerCacheWrapper from file:/projects/entando/entando-core/engine/target/classes/]
但是,您可能会在这里仔细考虑您的方法。最好是创建新项目,将前几个类移过来,然后随时修复编译错误。您将更好地了解事物是如何连接在一起的,即使它有数百个类,它也可能是值得的。
推荐阅读
- azure-storage - 审核 Azure 文件存储服务
- javascript - JavaScript 正则表达式仅适用于第一个字符字母,第二个及以后的字符可以是字母数字或特殊字符(连字符、逗号和空格)
- html - HTML - 如何将文本值分配给另一个属性的值?
- php - Laravel 显示来自 storage/app/public 的图像
- java - Spring Boot:最初的数据解析
- node.js - 在 NodeJS 中使用 AWS-SDK 调用本地 Lambda
- ios - 如何使用 openURL:options 将字典传递给其他 iOS 应用程序?
- php - 在许多输入中上传文件 - laravel
- python - 如何在 tkinter 中禁用 Treeview 上的多选
- sql - 符合多少条件?