如何在Java中设置和使用类,库,包?

时间:2013-01-10 15:54:30

标签: java class

我对使用非Java原生的外部类库和API的想法是新的,我甚至不知道我是否用正确的术语提出正确的问题。那么让我解释一下我在做什么。

我需要读取和写入Excel文件。我发现this page有一个Java-Excel API。我希望安装该API并将其用于我的本地Java实例(C:\java\),这样我就可以在创建新程序时导入这些类(例如import jxl.CellView)。我有sourceforge的zip文件,但在那之后,我只是输了。

说明参考在Eclipse中设置它;我不是Eclipse作为IDE的粉丝......所以我想知道如何“手动”完成它。我认为这将有助于我更好地理解为什么它的工作方式与未来的方式相同。

所以,我的下一条指令是...... “要在Java程序中使用此库,请将lib jxl.jar添加到项目中的类路径中。请参阅在Eclipse中更改类路径。”我只是将zip文件解压缩到C:\java吗?这是我们班级路径的意思吗?我需要遵循哪些步骤来确保我可以根据需要导入适当的类?

此外,这些类是否与applet捆绑在一起?当我编译一个java程序时,该文件的收件人是否能够运行它,即使他们没有在运行它的机器上安装这个特定的软件包?

有人可以给我一些看法吗?

4 个答案:

答案 0 :(得分:2)

我喜欢将所有第三方库放在c:\ java \ lib中。这样我可以将它们与我在c:\ java中的JRE和JDK分开。这不是绝对必要的,但是整洁很好。以下是一些特定于使用您感兴趣的库的说明。

jexcelapi_2_6_12.zip提取为c:\java\lib\

这应该意味着现在存在以下文件:C:\java\lib\jexcelapi\jxl.jar

现在让我们将您的代码放在c:\java\work中,以使其保持独立。使用文本编辑器创建文件c:\java\work\MyClass.java

import jxl.CellView;
public class MyClass {
    public static void main(String[] args) {
        System.out.println("I can access " + CellView.class);
    }
}

打开命令提示符并将目录更改为c:\ java \ work。

cd /d c:\java\work

现在编译类:

javac -classpath ..\lib\jexcelapi\jxl.jar MyClass.java

如果没有错误,该目录现在应该包含一个新文件MyClass.class,这是您编译的程序。

如果您看到错误: 'javac'未被识别为内部或外部命令,可运行程序或批处理文件。然后您可以指定javac.exe的完整路径。以下示例假定您有一个位于c:\ java \ jdk1.6.0_37中的JDK,它可能在您的系统上也可能不是:

c:\java\jdk1.6.0_37\bin\javac -classpath ..\lib\jexcelapi\jxl.jar MyClass.java

运行已编译的程序:

C:\java\work>java -classpath ..\lib\jexcelapi\jxl.jar;. MyClass

输出:
我可以访问类jxl.CellView

注意java类路径末尾的分号和点。这会将当前目录添加到类路径中,以便java可以找到MyClass.class。 javac没有必要这样做。

与仅应包含目录的PATH不同,java的CLASSPATH(或-classpath)可以包含文件和目录。当文件出现在类路径中时,它应该是一个JAR。由于JAR只是zip文件,因此您有时也会在类路径中看到ZIP文件。这是非标准的,但它有效。 Java会将.zip文件视为.jar。如果需要在程序中添加第二个库,请使用分号(Windows)或冒号(* nix)分隔文件。

javac -classpath ..\lib\jexcelapi\jxl.jar;..\lib\lib-2.0\lib-2.0.jar MyClass.java

有时库包含多个jar文件。在这种情况下,您需要将属于库的一部分的每个JAR文件添加到类路径中。再次,用分号分隔它们。如果这看起来很乏味,你就会开始明白为什么人们喜欢使用IDE或Ant来使用Java而不是命令行命令。

使用包时仍有许多事情要学习,使用环境变量CLASSPATH设置类路径而不是使用-classpath命令行参数,将JDK bin目录添加到PATH,添加多个条目在类路径中,创建shell脚本以便更轻松地重建和重新运行程序,使用IDE进行开发,使用Maven / Ant构建,制作自己的JAR,......要学习的内容列表一直在继续。这篇文章并不是为了表明最佳实践,而是为了让您快速上手。遵循Internet上发布的Oracle文档和其他最佳实践,以不断改进Java开发环境。

此外,这些类是否与applet捆绑在一起?
如果你的程序最终将成为一个小程序,那么是的,你需要将jxl.jar与你的程序一起分发 - 人们不会在他们的计算机上使用它,他们也不想自己下载它。我不会在这里描述如何制作Applet。网上有很多资源。谷歌为它提供了有关您遇到的问题的更具体的问题。

当我编译一个java程序时,该文件的收件人是否能够运行它,即使他们没有在运行它的机器上安装这个特定的软件包?
jxl库不会编译到您的程序中。您需要以某种方式将jxl库与您的程序一起交付给您的用户。您应该将程序捆绑到一个JAR中,因为大多数非平凡的程序都包含多个Java类,这意味着您的程序将包含多个.class文件。有很多方法可以解决这个问题。花一些时间阅读有关如何创建applet的资源,然后回到stackoverflow并提出更具体的问题。

答案 1 :(得分:1)

转到命令行。

输入:

echo %CLASSPATH%

它应该返回一个目录列表。您可以将要导入的库放入其中。

阅读:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

答案 2 :(得分:0)

类路径是目录和.jar文件的列表,Java虚拟机从中加载所需的类。默认情况下,某些目录和jar(默认情况下是Java安装附带的库),其他目录和jar必须由用户指定。

指定其他位置的一种方法是CLASSPATH环境变量。如果有多个条目将其分隔为平台的路径分隔符(Windows上的分号,大多数其他系统的冒号)。

另一种方法是启动编译器或java虚拟机时的-classpath选项。

在你的情况下,将jxl.jar文件放在某处(比如/some/path/jxl.jar)然后调用编译器(假设,MyClass在默认包中并存储在当前目录中)

javac -classpath /some/path/jxl.jar:. MyClass.java

并运行它

java -classpath /some/path/jxl.jar:. MyClass

答案 3 :(得分:0)

在zip文件中你有jxl.jar,你必须在你的proyect中包含这个jxl.jar,就像外部库一样。 例如在netbeans中:

http://jsumon.wordpress.com/2009/11/24/adding-external-jar-or-library-to-netbeans-java-project/

和eclipse:

http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29