所以我对 Java 尤其是 Eclipse 还很陌生,所以请原谅我的无知。我从服务器获取了一个项目并将其本地复制到我的机器上。当我打开工作区时,由于找不到罐子,我遇到了很多错误。这是有道理的,因为我没有与我从中复制的服务器相同的目录结构。因此,如果我将相同的外部 jar 复制到我的机器并让它编译成一个 jar 并将其复制回服务器,它会工作吗?还是会因为现在外部 jar 位于与预期不同的位置而失败?
另外,我应该把外部罐子放进普通罐子里以避免这个问题吗?
你应该没问题。Java 使用所谓的类路径来定位依赖项。开发机器上的类路径可能不同,但只要所有依赖项都在生产中的类路径上,一切都应该工作。
为了避免目录结构的同步问题,最常见的方法是使用 Maven——它将为你管理所有依赖项(但你必须管理 pom.xml——Maven 的项目描述符)。有点笨拙的方法是在项目中拥有依赖项,但是您最终可能会导致许多项目必须包含相同的 jar,然后会出现版本冲突等等。
对于小型项目,您可以自己管理依赖项,但较大的项目将需要更多考虑策略(如 Maven)。
关于可执行的jar,确保<jarfile>:\META-INF\MANIFEST.MF 中的Class-Path 条目是正确的,例如在它引用其他jar 的地方,这些jar 将在生产中存在。例如,假设我们拥有ourjar.jar
并假设这是其 MANIFEST.MF 的片段:
Class-Path: lib/myteamjar.jar
然后预计会有以下目录结构:
lib/myteamjar.jar
ourjar.jar
我不会向 Java 和 Eclipse 的新手推荐 Maven。我也会忘记 Eclipse。
您有包装和 CLASSPATH 问题。专注于此。
你在说什么样的项目?您得到的答案将取决于您正在创建的应用程序类型。它是一个可执行的 JAR 吗?那么正确的做法是将所有内容打包到一个 ZIP 文件中,该文件的布局与 JAR 清单中的 CLASSPATH 完全一致。
如果它是一个 Web 应用程序,那么正确的东西是一个 WAR 文件,其中包含您的应用程序需要的所有 JAR 文件在 WEB-INF/lib 目录中。
如果你正确地打包东西,你最终应该得到一个包,所有的东西都以正确的方式布局。您应该能够将其部署到服务器并使其全部正常工作。
不,外部罐子的位置无关紧要。您想要做的是将外部 jar 放在您的类路径中。你如何做取决于你如何运行你的java代码。如果您使用该java
命令从 CLI 运行它,它会将类路径作为参数。如果您希望您的代码在 Eclipse 中构建/运行,您需要右键单击您的项目,选择“构建路径”>“配置构建路径...”使用“添加 JAR...”按钮添加您打开的项目的一部分并“添加外部 JAR...”以添加驻留在项目外部的 jar。有关类路径的更多详细信息,请参阅工具的特定文档。