如何检查Java运行时环境中是否存在具有指定类名的重复类?
我的应用程序在有重复类的情况下无法正常运行,问题是“没有这样的方法” 该项目有两个类名相同的类,一个来自项目代码,另一个来自jar文件。如何在应用程序启动时检查此问题如何检查Java运行时环境中是否存在具有指定类名的重复类?,java,gradle,classloader,Java,Gradle,Classloader,我的应用程序在有重复类的情况下无法正常运行,问题是“没有这样的方法” 该项目有两个类名相同的类,一个来自项目代码,另一个来自jar文件。如何在应用程序启动时检查此问题 src/main/java/com/kxw/Example.java gradle.build compile("com.kxw:xxx:1.0")//contains com.kxw.Example 我希望在应用程序启动时可以检查JavaAPI或UTIL public void startUp(){
src/main/java/com/kxw/Example.java
gradle.build
compile("com.kxw:xxx:1.0")//contains com.kxw.Example
我希望在应用程序启动时可以检查JavaAPI或UTIL
public void startUp(){
if(existDuplicateClass("com.kxw.Example")){
shutdown();
}
}
protected boolean existDuplicateClass(String className){
//TODO
}
我不知道如何实现existDuplicateClass方法
参考文献:
最后,我用这种方式启动时检查复制类:
String classPath = Optional.ofNullable(xx.class.getProtectionDomain())
.map(ProtectionDomain::getCodeSource)
.map(CodeSource::getLocation)
.map(URL::getPath).orElse("");
//class is not from common-core.jar
if (!classPath.contains("common-core")) {
log.error("{} thrift class may be duplicate ...", xx.class.getName());
shutdownContext.shutdown();
}
Java确实没有用于此的实用程序。你不应该给你的类取相同的名字,那是一场灾难。包是将类分开的名称空间,请使用它们;您可以在源代码中为所有此类可以复制的类实现
version
方法,并在启动时手动检查它们-代码将通过或失败,methodnotfound异常。我同意,如何实现version方法,请给我一些提示?