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



3 Answers

Java历史悠久,经验表明一些想法很好而有些想法很糟糕。

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

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

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

但是,为了让你开始。 如果要编写Java Web应用程序:

  1. 获取Eclipse Java EE版本。
  2. 创建一个新的动态Web项目,例如名为foobar。
  3. 在foobar / WebContent / WEB-INF / lib中拖放(或复制/粘贴)所需的jar文件
  4. 创建一个名为foobar / WebContent / index.jsp的新文件。 在空白文件类型<h1>Hello World <%= new java.util.Date() %></h1>
  5. 右键单击index.jsp的编辑器,选择Run - > Run on Server,然后在localhost服务器上选择Basic - > J2EE preview,然后选择Finish。

浏览器窗口现在将在浏览器或Eclipse内部打开,这将呈现您的JSP页面。 您可以更改JSP页面,使用Ctrl-S保存它并重新加载浏览器窗口以查看更改。

java eclipse java-ee jar classpath

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

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

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

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

真的,我想更好地理解CLASSPATH,Eclipse的Java构建路径和WEB-INF / LIB文件夹 - 它们服务的目的,它们之间的关系,以及我应该把我的JAR放在各种各样的地方的情况。 我很感激您可以给我的任何建议,或者您可以推荐的任何文章。

谢谢。




如果您正在处理Web应用程序,/ WEB-INF / lib是放置JAR的便携位置。 这是Web服务器 servlet容器期望找到应用程序的jar文件的位置。




我不是Eclipse专家,但我认为您的问题可以像这样回答:

1)CLASSPATH是一个环境变量,在启动java程序时读入,并由类加载器用于确定类的放置位置。

我只会在从脚本启动java程序的情况下修改CLASSPATH变量,因为这样可以方便地启动程序并确保找到类。 在开发Web应用程序时,情况并非如此。

2)WEB-INF / lib是Web应用程序容器的类加载器(如tomcat或glassfish)在Web应用程序需要解析类时查看的目录。 因此,您将Web应用程序中使用的类放在那里。

某些IDE确实包含您在项目中自动使用的库/ .jar文件。

3)Eclipse库/类路径在开发期间解析。 我会假设,但道歉,假设,因为一个人真的不应该这样做;),你可以定义一个库(将外部.jar文件添加到项目)和自动完成/所有其他有趣的功能应该开始使用它,如您基本上可以使用该活动为IDE显示这些类。 我还假设您可以通过IDE将这些库标记为自动添加到Web项目等。

一般来说,这里有关于如何在课程中找到课程的好读物(这是太阳的官方文件)。 另外一个关于这一点的好地方是ClassLoader类文档。




Related