0

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

我需要读取和写入 Excel 文件。我发现这个页面有一个 Java-Excel API。我想为我的本地 Java 实例安装并使用该 API()C:\java\,这样我就可以在创建新程序(例如 import jxl.CellView我有一个来自sourceforge的 zip 文件,但在那之后,我就迷路了。

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

所以,我的下一条指令是……“要在 Java 程序中使用这个库,请将 lib jxl.jar 添加到项目中的类路径中。请参阅在 Eclipse 中更改类路径。” 我只是将 zip 文件解压缩到C:\java? 这就是他们所说的我的课程路径吗?我需要从这里执行哪些步骤以确保我可以根据需要导入适当的类?

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

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

4

4 回答 4

2

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

提取jexcelapi_2_6_12.zipc:\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 开发环境。

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

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

于 2013-01-10T16:15:56.300 回答
1

转到命令行。

输入:

echo %CLASSPATH%

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

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

于 2013-01-10T15:59:21.683 回答
0

类路径是目录和.jar文件的列表,Java 虚拟机从中加载它需要的类。一些目录和 jars 默认在里面(基本上是 Java 安装附带的库),其他的必须由用户指定。

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

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

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

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

并运行它使用

java -classpath /some/path/jxl.jar:. MyClass
于 2013-01-10T16:11:26.243 回答
0

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

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

和日食:

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

于 2013-01-10T16:14:57.220 回答