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