我对java非常陌生,在设置类路径方面也有一些疑问。在这个论坛上问问题之前,我已经做了家务活。试着搜索并引用其他论坛,但没有找到我正在搜索的内容。
所以,它开始了。
现在是主要的部分..。
现在我想做的是..。
我想将我的应用程序引用到环境变量- XYZ_LIB_PATH,并获取平台的XYZ_LIB_PATH环境变量所指向的目录中的所有jar文件。通过这样做,我不需要担心在安装我的应用程序时在每台机器上查找jar文件。它只需查看XYZ_LIB_PATH变量所指向的目录,并通过加载所需的jars继续运行。
这背后的原因是-由于应用程序XYZ是可定制的,每个用户都可能在不同的目录中安装了XYZ,我的应用程序需要知道XYZ是在哪里安装的。相反,如果我使用环境变量,通过查看XYZ_LIB_PATH变量的路径集,我可以轻松地为我的应用程序获得所需的jars。用户不能更改环境变量,因此这个变量在所有平台上都保持不变,我可以为jars获得一个有效的路径。
有什么方法可以在java中实现这一点吗?
谢谢,维奈·S
发布于 2012-07-22 14:37:48
只需为您的应用程序提供一个启动脚本:
java -cp myApp.jar;%XYZ_LIB_PATH%\* com.foo.bar.MyApp(上面的示例适用于Windows。在Unix上也可以这样做)。
如果需要,此脚本可以检测是否设置了XYZ_LIB_PATH环境变量,如果没有,则优雅地退出:
IF NOT DEFINED XYZ_LIB_PATH (ECHO XYZ is NOT installed)发布于 2012-07-22 14:31:55
看看我在google中找到的这段代码,它应该解释如何动态加载jars:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @author Thomas.Darimont
*/
public class DynamicClasspathExtensionExample {
/**
* @param args
*/
public static void main(String[] args) {
try {
Class.forName("com.google.inject.Injector");
System.out.println("Found");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage() + " not found...");
}
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), new File[]{new File("D:/stuff/google/guice/1.0/guice-1.0.jar")});
try {
Class.forName("com.google.inject.Injector");
System.out.println("Found");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage() + " not found...");
}
}
private static void addJarsToClassPath(File... jars) {
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), jars);
}
private static void addJarsToClassPath(ClassLoader classLoader, File... jars) {
if (classLoader instanceof URLClassLoader) {
try {
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });
addUrlMethod.setAccessible(true);
if (null != addUrlMethod) {
for (File jar : jars) {
try {
addUrlMethod.invoke(classLoader, jar.toURI().toURL());
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}编辑:这样您就可以用以下内容加载jar:
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), new File(System.getenv("XYZ_LIB_PATH"), "library.jar"));https://stackoverflow.com/questions/11601060
复制相似问题