我可以在sun的rt.jar文件中添加类吗?

时间:2009-04-12 19:17:17

标签: java runtime jdk1.6 javax.mail

我下载了Javax.mail包。我有jdk1.6.0_11。 问题是......我无法让javac或java找到那些类! 我可以使用JCreator LE(通过添加邮件jar)来编译应用程序 到它的搜索列表)但是,当我尝试在命令窗口中运行应用程序时, 它失败了。

我可以在没有的情况下将这些新类添加到rt.jar中 伤害我的jdk安装? 我知道java已将它连接到那里寻找类。 (并且,邮件类在javax包中 - 看起来像 它们可以合理地添加到rt.jar中的javax文件夹中。

谢谢! Phil D'

5 个答案:

答案 0 :(得分:3)

不,你不能,也不应该。

相反,找出你的类加载器的问题(可能是路径?)。您需要访问下一个库。

使用rt.jar进行混乱意味着您无法在任何其他JVM上运行。

答案 1 :(得分:2)

您应该在类路径中指定jar文件:最好在命令行中使用-cp选项,但可能使用CLASSPATH环境变量。

或者,您可以在java.ext.dirs系统属性中指定其目录。有关详细信息,请参阅documentation for the extensions mechanism

你不应该惹恼rt.jar。这绝对是提供额外jar文件的方式 - 它类似于尝试将Microsoft Word添加到Windows内核;)

答案 2 :(得分:1)

向rt.jar添加内容似乎是一个坏主意,尽管它可能且易于实现。

尝试从命令行编译应用程序,如下所示:

javac -cp <path_to_3rd_libs>/jarfile.jar . MainClass.java

如果编译器仍然抱怨javax.mail包,请尝试解压缩/检查jar文件以查看javax.mail包(及其预期内容)是否存在。

(在Windows上,使用7zip很容易检查一个jar文件。)

答案 3 :(得分:0)

绝对没有。 如果从命令行发布正在运行的命令,我们将能够指向正确的方向,但很可能您只是缺少类路径参数。

java -classpath /path/to/mail.jar MyClass

答案 4 :(得分:0)

您需要了解CLASSPATH概念,该概念允许您将包含类的单个类和jar文件添加到可用于要编译和/或运行的代码的已定义类的“Universe”中。它在思想上类似于Windows世界中的PATH变量。

对于Windows命令行,这是文档:

http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html

Java Tutorial让我感到惊讶的是,我没有为这个特定的概念写得很好:

http://java.sun.com/docs/books/tutorial/essential/environment/paths.html

你很可能需要一些东西:

C:&GT;设置CLASSPATH = c:\ javamail \ first.jar; c:\ javamail \ second.jar

之后java和javac都应该知道这些类