测试程序:
//JarTest.java
import com.*;
class JarTest {
public static void main(String args[]) {
CA ca = new CA();
ca.print();
}
}//CA.java
package com;
public class CA
{
public void print()
{
System.out.println ("This class is CA!");
}
}放到对应的目录编译好后,在当前目录下有一个 JarTest.class 还有一个 com 的文件夹,com 文件夹下有一个 CA.class .
(以下的指令都在当前目录下执行)
此时使用 java JarTest 可以得到正确的结果.
接着使用 jar -cf lib.jar com 指令,把 com 文件夹打包为 lib.jar
这时就可以删除 com 这个文件夹.(当前文件夹下就只有 JarTest.class 和 lib.jar 这两个文件了)
这时可以使用 java -cp .;lib.jar JarTest 来执行程序.一切正常.
当然你也可以把 lib.jar 文件添加到 ClassPath 系统变量中,以上的指令一样能正确的执行.
//JarTest.java
import com.*;
class JarTest {
public static void main(String args[]) {
CA ca = new CA();
ca.print();
}
}//CA.java
package com;
public class CA
{
public void print()
{
System.out.println ("This class is CA!");
}
}放到对应的目录编译好后,在当前目录下有一个 JarTest.class 还有一个 com 的文件夹,com 文件夹下有一个 CA.class .
(以下的指令都在当前目录下执行)
此时使用 java JarTest 可以得到正确的结果.
接着使用 jar -cf lib.jar com 指令,把 com 文件夹打包为 lib.jar
这时就可以删除 com 这个文件夹.(当前文件夹下就只有 JarTest.class 和 lib.jar 这两个文件了)
这时可以使用 java -cp .;lib.jar JarTest 来执行程序.一切正常.
当然你也可以把 lib.jar 文件添加到 ClassPath 系统变量中,以上的指令一样能正确的执行.
解决方案 »
- 关于java不能动态决定数组大小的疑问
- 新手求助,关于对象包装器类Integer不能改变值的问题
- 使用范类型的时候,为什么会报“unchecked cast”的警告。
- 真急啊
- 大家帮忙看看这段代码!!
- 请高手帮帮忙! 在Java里SimpleDateFormat处理日期的困难问题"?
- 怎样作出自己的DLL?
- 急!请问:在JBuilder9中创建一个class时报错“Superclass type cannot be resolved”,如何解决?多谢!
- 为何我在java serlvets中输出朱鎔基,最终在IE得到的是朱?基
- 关于javamail问题,请高手解答
- 如何设置JTable某一个cell的Renderer
- 请教int转换成字符串的一个问题
当前目录下建立 manifest.mf 文件:内容为
Main-Class: JarTest然后执行指令:
jar -cmf manifest.mf j.jar *.class
把 JarTest.class 打包到 j.jar 文件中.
此时无论我执行:
java -jar j.jar
java -cp lib.jar -jar j.jar
java -cp .;lib.jar -jar j.jar
这三个指令,还是把 lib.jar 添加到 ClassPath 中,都只能得到一个结果
Exception in thread "main" java.lang.NoClassDefFoundError: com/CA
at JarTest.main(JarTest.java:5)
不能找到 com/CA 类.然后我编辑 manifest.mf 为:
Main-Class: JarTest
Class-Path: .;lib.jar再用 jar -cmf manifest.mf j.jar *.class 打包.
同样执行上面的三个运行指令,得到结果还是 不能找到 com/CA 类.
把 lib.jar 添加到 ClassPath 中,结果还是一样.这是为什么呢?????
怎么 JAR 文件不能设置 类路径的 吗???
在同样的条件下,只能正确执行 .class 文件,却不能执行 .jar 文件.
难道一个 jar 文件不能调用另一个 jar 文件里的类吗???请大侠们指点一下!!!!
谢谢!!!!!!!!!!!!!!!!!!!
你可以尝试把jar解压,
META-INF和你的包文件夹应该在同一层目录!
比如我的程序为:package net.csdn.www;
则META-INF文件夹和net文件夹应该在同一层目录!
我甚至可以把文件压缩到一个 .zip 文件中,不需要 META-INF 执行 Java 程序时,只要指定了 classpath 中有这个 zip 文件,一样的可以使用!!
你打得包有问题
包里面应该是 com.*.
META-INF
同样的设置,用 .class 文件可以调用到库,但用 .jar 文件来运行就会找不库!!这是为什么?????
在manifest.mf中添加一行Class-Path: lib.jar强行指定路径
用ide用得太多了
但就是因为所有文件都在一个包里,文件太大,而且也不能多个程序共享!
所以我才想分开打包,以实现库的共享!!对于大家说的 在 在manifest.mf中添加一行
Class-Path: lib.jar 我这个已经测试过了,大家可以看看我的测试过程!!后来我又换了一台电脑,同样的配置, 使用
Class-Path: lib.jar
的方法,有时可以,有时有不行,我自己这台电脑是始终不行!!!
所以才不明白,这是为什么!!!!!也请大家帮我测试一下,这是一个个别的问题,还是一个通用的问题!!
最好能找到问题的原因!!!谢谢!!!!!!!!
呵呵,现在我使用 Class-Path: lib.jar 可以运行了!!!!!!!但改成
Class-Path: .;lib.jar
还是不能运行!
jar -cmf manifest.mf j.jar *.class
你把package弄丢了!!!
java -cp .;j.jar;lib.jar JarTest 即可!
我老是想,java的字符串比较速度怎么可能比C/C++还快呢,String的equals方法是下面这个样子的:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}里面有个instanceof操作,有个类型转换,而且数组的访问是有运行期越界检查的,怎么可能比C/C++快嘛!
定睛一看,有这么个判断:
int n = count;
if (n == anotherString.count) {
因为java String的长度是构造String时就已经计算好的,那么,不同长度的String肯定不相等,根本不需要比较(在求String的长度和比较不等长String时java和Pascal相似,比C高效),而我上面给的两个String恰恰不等长!所以说速度很快,比VC编译的同样的C程序还快。但是,当把第一个String改为和第二个一样长,末尾为“1”后,整个执行时间变成了10多分钟,效率不到C的10分之一!