比如我写了一个java文件,然后这个java文件有一个main函数,我可以在ide环境直接运行她,但是如果我把这个class copy到其他的机器上,然后写一个.bat 内容是"java" -cp..............
就执行不了了,因为load不到该类依赖的.jar文件。
然后我就想
在java文件里动态的把依赖的.jar文件放入classpath但是我不知道怎么放了。
难道用:
System.getProperties().setProperty("classpath","java.class.path"));
如果我用了
System.getProperties().setProperty("classpath","java.class.path"));
是否该句的下句就立刻可以load到我上面设置的依赖包了?
对
ClassPath还是很乱的感觉啊?不知道在class执行的机制中ClassPath到底是怎么使用的。
就执行不了了,因为load不到该类依赖的.jar文件。
然后我就想
在java文件里动态的把依赖的.jar文件放入classpath但是我不知道怎么放了。
难道用:
System.getProperties().setProperty("classpath","java.class.path"));
如果我用了
System.getProperties().setProperty("classpath","java.class.path"));
是否该句的下句就立刻可以load到我上面设置的依赖包了?
对
ClassPath还是很乱的感觉啊?不知道在class执行的机制中ClassPath到底是怎么使用的。
解决方案 »
- java对象 正解
- 求救:关于JAVA中使用SHELL的问题!(附代码)
- 用java实现SQL数据库的导入导出
- 实习的时候公司留的作业,要用到ajax,没有太好的思路。
- 一个关于JTree的问题,找不出原因,还望大家帮忙.
- 我是初学者,我有几个问题,怎么也想不明白,请大家指教,谢谢!!
- 各位大大,请教如何从html中取得所有的URL??
- 请求帮助,使用可更新ResultSet更新含中文字符的字段时出现异常
- c语言中time_t类型是一个长整型,java中的字符串"YYYY-MM-DD HH:MM:SS"怎么转换为这个长整型?
- double 转 String
- 很恶心的泛型问题
- Float 与 Double 同样的值对象,能equals true吗?
我就想写在java文件里面有什么办法可以呢?
楼主为啥非要写在Java文件里?
Test.java在包com.biao.normal中
project directory: JavaDemo
JavaDemo/com/biao/normal/Test.java
JavaDemo/pack.jar
Test.java要用到pack.jar中的com/biao/pack/PackageDemo.java
怎样写classpath和javac, java来运行Test.java?
JavaDemo/runandcompile.bat:
set classpath=.;./pack.jar #关键是这里
javac com/biao/normal/Test.java
java com/biao/normal/Test
其中最关键的一点是set classpath=.;./pack.jar中的".;"是必不可少的
1. 确保你正确设置了java_home, path 和classpath
java_home=c:\java\jdk....(这个不是必须,前提是path中java命令能找到就可以)
path=%java_home%\bin;...
classpath=.2. 用-classpath,可以使用相对或绝对路径,一般建设用相对路径,所需要jar都放在lib包中。
run.bat
lib/*.jarin run.bat
java -classpath lib\yourjar.jar;lib\yourjar2.jar com.yourpackage.yourmainclass
系统JRE的path和classpath设置在环境变量中,如果你想这个也省了
就直接把JRE也打包在你的应用中。
这就好比,一个上门服务的计算机安装工程师,他本身具有安装计算机的配件的能力,
但是,如果要让他安装配件,就必须得给他相应的“环境”,也就是地点、配件和工具。
我们实际的解决方案是配备一个“小秘书”(bat文件),
让小秘书拿着配件和工具,领着工程师到正确的地点进行工作。我们知道,一台机器和一台机器,上面安装的软件,以及各个软件、文件的位置是不相同的。
所以,楼主的bat文件,就不能写的太死板了。
比如,无论什么路径都用常量方式的绝对路径。应该尝试 跟路径+相对路径 的方式来进行。
12楼的兄弟,他的path变量代表的路径,就采用了我说的方法。
当然,跟路径,楼主还应该先进行常规位置的查找,才比较合适,
因为,每个机器,跟路径会有所不同。
start javaw 【your main class name】
import demo.Person;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;/**
* 这里演示动态加载一个jar的方法
* 其中 demo.Person 类打包在 E:/Training/person.jar
* 执行的时候只需要在Demo的当前路径执行 java Demo就可以自动装载person.jar
*/
public class Demo {
public static void main(String[] args) {
try {
// 包路径定义
URL urls[] = new URL[ ]{ new File("E:/Training/person.jar").toURL() }; // 获取类装载器,然后用反射方式调用类加载器的addURL方法,把新的jar路径添加进去
URLClassLoader urlLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;
Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(urlLoader, urls);
Person p = new Person("Kyle.Zhang", 33);
System.out.println(p);
} catch (Exception exp) {
exp.printStackTrace();
}
}
}package demo;public class Person {
private int age;
private String name; public Person() {
}
public Person(String name, int age) {
this.age = age;
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
} public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
} public String toString() {
return "Person{name: " + this.name + ", age: " + this.age + "}";
}
}我问了老师啊,你也学习一下吧。xixi