有没有办法确定在运行时从哪些jar加载哪些类?
我相信我们以前一直都在JAR地狱.我在项目上遇到了很多故障排除ClassNotFoundException和问题NoClassDefFoundError.我想避免在罐子里找到一个类的所有实例,并在代码上使用消除过程导致CNFE找到罪魁祸首.
是否有任何分析或管理工具可以为您提供此类信息?
这个问题非常烦人,因为我们应该在类加载时获得这些信息.必须有一种方法来达到它,或记录并找到它,但我知道什么都不会做到这一点,对吗?
我知道OSGi和版本化的软件包/模块旨在使这个问题成为一个问题......但它似乎不会很快消失.:)
注意:我发现这个问题是我的问题的一个子集,与从版本化的jar加载的类有关.
更新:有点相关,这篇文章解释了在jar中(在当前目录下)或在M2_REPO中搜索类的策略. JarScan,扫描所有子文件夹中的特定类的所有JAR文件
更新2:JBoss Tattletale也有些相关
是否有一个独立于平台的Java语句来从与Java源代码不同的目录中加载本机库?我想用这样的东西:
public class HelloWorld {
static {
System.loadLibrary("../some_project/HelloWorld");
}
public static native void print();
}
Run Code Online (Sandbox Code Playgroud)
问题是System.loadLibrary()不支持pathname参数中的目录分隔符.另外,不幸的是,System.load()需要一个绝对路径名,这不仅意味着我不能像上面那样指定一个相对目录(我想做),但它还要求参数包括,例如,前面的Linux系统上JNI库名称的"lib"和".so"扩展名.
有没有一种标准的处理方式?如果可能的话,我想避免编写一堆依赖于平台的Java代码来构造正确的JNI库名.