【发布时间】:2023-03-19 21:35:02
【问题描述】:
总结
Java 环境变量设置正确,从 echo-ing 中可以看出。但是,只有在 javac 命令显式包含时才能看到 jar。
详情
这与图形和OpenGl无关,某些问题与类路径有关,即第三方jar文件的导入。
使用 Windows XP SP3、JDK 1.7.0_13
在 Windows xp 上,系统环境变量 PATH/JAVA_HOME/CLASSPATH 已设置/添加到包括这些目录:
C:\Documents and Settings\Administrator\My Documents\project\jar;
C:\Java\jdk1.7.0_13;
C:\Java\jdk1.7.0_13\bin;
C:\Java\jdk1.7.0_13\lib;
没有可能发生冲突的用户定义变量。 来自终端的保证(我在更改环境变量后重新启动,以便在 windows xp 中设置环境变量,请参阅Environment variables for java installation):
>echo %classpath%
C:\Documents and Settings\Administrator\My Documents\project\jar;C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;
>echo %java_home%
C:\Documents and Settings\Administrator\My Documents\project\jar;C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;
>echo %path%
C:\WINDOWS\System32;... ...C:\Java\jdk1.7.0_13;C:\Java\jdk1.7.0_13\bin;C:\Java\jdk1.7.0_13\lib;C:\Documents and Settings\Administrator\My Documents\project\jar;
矫枉过正,是的...当它起作用时,我会适当地修剪它们
相关文件:
C:\Documents and Settings\Administrator\My Documents\project\jar\jogl-all.jar
C:\Documents and Settings\Administrator\My Documents\project\Mush.java
C:\Documents and Settings\Administrator\My Documents\project\JarDir.java
jogl-all.jar 包含“javax.media.opengl.GL2”,Mush.java 是一个通过导入 java-OpenGL 库显示简单 3D 蘑菇的程序;具体来说,它导入“javax.media.opengl.GL2”。
JarDir.java 是我在http://www.java2s.com/Code/Java/File-Input-Output/Listfilesinajarfile.htm 找到的一个程序,它显示了 jar 中的类,我用它来证明 jar 的内容。也证明了在本机上编译是可能的。
JarDir.java如下:
import java.io.*;
import java.util.*;
import java.util.jar.*;
public class JarDir {
public static void main (String args[])
throws IOException {
JarFile jarFile = new JarFile("C:\\Documents and Settings\\Administrator\\My Documents\\project\\jar\\jogl-all.jar");
Enumeration enumy = jarFile.entries();
while (enumy.hasMoreElements()) {
process(enumy.nextElement());
}
}
private static void process(Object obj) {
JarEntry entry = (JarEntry)obj;
String name = entry.getName();
long size = entry.getSize();
long compressedSize = entry.getCompressedSize();
System.out.println(
name + "\t" + size + "\t" + compressedSize);
}
}
并给出输出:
>javac JarDir.java
>java JarDir
... (lots of stuff)
javax/media/opengl/GL2.class 94123 28513
... (lots of stuff)
这表明了成功的编译和 jar 文件中类的存在。尝试运行 Mush.java 会出现很多错误,尤其是第一个错误:
>javac Mush.java
Mush.java:21: error: package javax.media.opengl does not exist:
import javax.media.opengl.GL2;
^
为了确定这是否是类路径问题,我运行了:
>javac Mush.java -cp ./jar/jogl-all.jar
由于缺少相关类(例如由 Mush.java 实例化并位于同一项目文件夹中的 MushScene.java )而导致错误。 ..) 但是找到 javax.media.opengl 没有问题!所以问题一定是环境变量问题!
这意味着,尽管根据 echo %classpath% 正确设置了类路径,但 java 不同意。我做错了什么?
注意:Mush.java 程序已经在 Linux 上进行了演示。
注意 2:我有多个 jar,如果我最终在 jar 文件夹中使用 N 个 jar,我希望能够包含该文件夹,而不是专门命名每个 jar =)
【问题讨论】:
-
为什么不在类路径
C:\Documents and Settings\Administrator\My Documents\project\jar\jogl-all.jar中添加完整的 jar 路径。检查完整路径 -
看到
>javac Mush.java -cp ./jar/jogl-all.jar你提供完整路径 -
感谢 JB Nizet 和 Subin。虽然 jar 文件夹在类路径中,但 jar 的内容不在,它的类似 jar 是它们自己的文件夹。那么问题就变成了,我们如何递归地添加一个文件夹,以便将所有子文件夹(和 jar 内容)添加到 Classpath(程序将在哪里查看)?这个问题是单独的,已经在这里问过:stackoverflow.com/questions/402330/…
标签: java path classpath environment-variables java-home