在一个大量使用反射来根据环境选择类的项目中,有没有办法确定构建中要包含哪些库?目前,将一个图书馆从项目中拿出来是一场赌博,但坚持目前的计划“包括一切,这是确保的唯一方法”,这使整个事情变得臃肿和笨拙。
答案 0 :(得分:1)
您可以使用JavaAssist lib在运行时包含新的类路径或修改类。
您可以将目录名称注册为类搜索路径。例如,以下代码将目录/ usr / local / javalib添加到搜索路径:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath("/usr/local/javalib");
用户可以添加的搜索路径不仅是目录,还包括URL:
ClassPool pool = ClassPool.getDefault();
ClassPath cp = new URLClassPath("www.javassist.org", 80, "/java/", "org.javassist.");
pool.insertClassPath(cp);
答案 1 :(得分:1)
不幸的是,对于动态加载的类来说这并不困难,特别是使用将类名作为字符串传递的工厂。
如果jvm支持-Xcomp and -Xbatch
选项以及-XX:CompileThreshold
,则可以在开发和测试环境中使用它。它会增加你的启动时间。
这些选项只会让您的工作更轻松,但您仍可能需要彻底测试。