CLASSPATH,Java Buld Path(eclipse)和WEB-INF\LIB:使用什么,何时以及为什么?

2022-09-01 05:18:44

我最近从.NET切换到J2EE,并且对放置JAR文件的位置感到困惑。我知道CLASSPATH,WEB-INF和Eclipse的Java Web Path都是可以存储JAR的地方,但我对使用哪个文件夹,何时以及为什么使用感到困惑。

首先,我们有CLASSPATH。我通常通过进入“我的计算机”中的“环境变量”来设置它。我知道这是Java编译器查找JAR文件的默认位置。当我向 CLASSPATH 环境变量添加文件夹或 JAR 时,为什么 Eclipse、Java 编译器和 Web 服务器忽略了它?

另外,我知道 WEB-INF\LIB 是一个可以放置 Web 应用将要使用的 JAR 文件的地方。但是,我把 JAR 放在 WEB-INF\LIB 中,只是为了忽略它们。在什么情况下我应该将 JAR 放入 WEB-INF\LIB 文件夹中?如何让 Eclipse 或 Web 服务器注意到它们?

到目前为止,唯一适合我的是实际更改Eclipse项目的Java构建路径。我将选择我需要的 JAR,然后点击“添加外部 JAR”。大多数时候,当我这样做时,Eclipse会识别我的JAR并阅读其中的类。但是,在执行此操作时,我遇到了一堆奇怪的随机错误(我认为主要与依赖项有关)。出于某种原因,我只是觉得这不是正确的做事方式,而且我错过了一些重要的信息。我什么时候应该在 Eclipse 中手动添加外部 JAR,什么时候应该以不同的方式做事?为什么 Eclipse 的 Java Build Path 似乎不知道我的 CLASSPATH 环境变量中的文件夹?

真的,我只想更好地了解CLASSPATH,Eclipse的Java Build Path和WEB-INF / LIB文件夹 - 它们所服务的目的,它们之间的关系,以及我应该在各种情况下放置我的JAR的位置。我很感激你能给我的任何建议,或者你可以推荐的任何文章。

谢谢。


答案 1

您在环境中设置的应用程序仅影响独立的 Java 应用程序,即从命令提示符或图标运行的应用程序。正如你所注意到的,Eclipse 忽略了这一点。它设置自己的每个项目的类路径。CLASSPATH

javac和 ,如果从命令提示符调用,应该/可能遵循此路径,但不再认为这样做是很好的做法。事实证明,每个应用程序都需要自己的一套东西,所以全局CLASSPATH并没有真正做任何好事。现代做法是简单地使用 命令行上的选项指定类路径 或 。java-cpjavacjava

独立的 Web 应用程序服务器还将设置自己的类路径。从命令行或 GUI 中,WebApp 服务器通常由脚本(或 )启动,该脚本使用 设置类路径。Tomcat有一个名为or的目录,它希望看到应该可用的库服务器和在其下运行的所有程序。但是您通常不需要/不想弄乱这一点,因为应用程序习惯于在 中提供自己的库集合。.BAT.sh-cpcommoncommon/libWEB-INF/lib

因此,对于 Web 应用程序,假设 Eclipse 为您预先构建了这样的目录结构,那么您将把变量 jar 放入目录下。libWEB-INF

你需要的所有库也需要让 Eclipse 知道。在项目资源管理器中,我一次选择它们的整个部分,右键单击并选择 。这比手动弄乱Eclipse的项目构建路径更容易。Build Path | add to build path


答案 2

Java有着悠久的历史,经验表明,有些想法是好的,有些是坏的。

CLASSPATH 环境变量是告诉 Java 机器从程序中查找类的位置的初始方法,并且对于命令行程序来说相当有效。人们很快发现,这不应该是一个全球性的事情(因为从长远来看,这往往会把事情搞砸),而是一个每个程序的事情。这可以通过创建一个包装脚本/BAT 文件来完成,该脚本/BAT 文件设置变量并运行 Java 机器。

一切都很好,然后人们想用Java编写Web服务器的东西。Servlet API 是在 Web 应用程序是独立单元的情况下创建的 - 这导致每个 Web 应用程序的 CLASSPATH WEB-INF/类下的解压缩文件,加上 WEB-INF/lib 下的 jar 文件。仅此而已。这意味着全局 CLASSPATH 变量将被忽略。这已经被发现是一件非常好的事情,所以这个概念已经转移到了其他地方。

例如,一个“可执行jar”(Eclipse称之为“可运行jar”),它被“java -jar foobar.jar”调用,在一个特殊的清单文件中包含Jar内部的完整类路径。用于从 Web 服务器启动 Java 程序的 Java Web Start 明确列出了服务器上配置文件中的完整类路径。

但是,为了让您入门。如果你想写一个 Java Web 应用程序:

  1. 获取 Eclipse Java EE 版本。
  2. 创建一个新的动态Web项目,例如名为foobar。
  3. 拖放(或复制/粘贴)您需要的 jar 文件在 foobar/WebContent/WEB-INF/lib 中
  4. 创建一个名为 foobar/WebContent/index.jsp 的新文件。在空白文件类型中<h1>Hello World <%= new java.util.Date() %></h1>
  5. 在编辑器中右键单击索引.jsp,选择运行 ->在服务器上运行,然后选择基本 ->本地主机服务器上的 J2EE 预览,然后选择完成。

现在将打开一个浏览器窗口,无论是在浏览器中还是在Eclipse内部,它将呈现您的JSP页面。您可以更改 JSP 页,使用 Ctrl-S 保存它,然后重新加载浏览器窗口以查看更改。


推荐