2012-05-01 37 views
1

因此,我对Java,特别是Eclipse相当陌生,所以请原谅我的无知。我从一台服务器上取了一个项目并将它复制到本地机器上。当我打开工作空间时,由于无法找到罐子,我有很多错误。这是有道理的,因为我没有与从我复制的服务器相同的目录结构。因此,如果我将同一个外部jar复制到我的机器并将它编译成jar并将其复制回服务器,它是否可以工作?或者它会失败,因为现在外部的罐子在一个不同的地方,而不是它所期待的?了解Eclipse中的外部罐区

另外,在路上我应该把外部瓶子放到普通的罐子里以避免这个问题?

+0

因此,经过更多的研究,看起来他们正在使用包含外部JAR的用户库。如果可以,我可以更改用户库的Jars指向我的本地副本的路径,然后我能够将我的可执行JAR复制回服务器而无需更改其他任何东西?感谢所有的答复。 – tacotime

回答

2

你应该没问题。 Java使用所谓的类路径来定位依赖关系。类路径在开发机器上可能是不同的,但只要所有的依赖关系在生产环境中的类路径上,一切都应该起作用。

为了避免目录结构同步的问题,最常用的方法是使用Maven - 它会管理你的所有依赖(但你必须管理pom.xml - Maven的项目描述符)。有点笨拙的方法是在项目中拥有依赖关系,但是最终可能会有许多项目必须包含相同的jar包,然后会出现版本冲突等问题。

对于小型项目,您可以自行管理依赖关系,但是较大的项目需要通过策略进行更多思考(如Maven)。

关于可执行文件夹,请确保< jarfile>:\ META-INF \ MANIFEST.MF中的Class-Path条目是正确的,例如,在参考其他罐子的地方,那些罐子将在生产中出现在那里。例如,假设我们有ourjar.jar并认为这是从它的MANIFEST.MF一个片段:

Class-Path: lib/myteamjar.jar 

那么这将是预计将有以下目录结构是否到位:

lib/myteamjar.jar 
ourjar.jar 
+0

谢谢您的回复。我张贴了更多信息。我一定会在将来看Maven,听起来像是一个有用的工具,但现在我需要时间。 – tacotime

+0

我在上面的答案中添加了更多信息。我建议你改变用户库路径,生成你的jar文件,检查清单是否正确。然后你会确定的。 – maksimov

+0

当我查看当前JAR的manifest.mf时,它没有类路径条目,它只是说:Manifest-Version:1.0 – tacotime

0

没有,外部罐子的位置不重要。你想要做的是把外部的瓶子放在你的类路径中。你怎么做取决于你如何运行你的java代码。如果使用命令java从CLI运行它,它将类路径作为参数。如果你想让你的代码在Eclipse中构建/运行,你需要右键点击你的项目,选择“Build Path”>“Configure Build Path ...”。使用“Add JARs ...”按钮来添加那些是你已经打开的一个项目的一部分和“添加外部JAR ...”来添加驻留在项目之外的jar。有关类路径的更多详细信息,请参阅您的工具的具体文档。

0

我不会推荐Maven给那些对Java和Eclipse相当陌生的人。我也会忘记Eclipse。

您有一个包装和CLASSPATH问题。专注于此。

你在说什么类型的项目?您得到的答案将取决于您创建的应用程序类型。它是一个可执行的JAR吗?然后,正确的做法是将所有内容打包到一个ZIP文件中,该文件与JAR清单中的CLASSPATH所预期的完全一致。

如果它是一个Web应用程序,那么正确的是一个WAR文件,在您的应用程序需要的所有JAR文件在WEB-INF/lib目录中。

如果你正确包装的东西,你应该结束了一个包装,所有的东西都摆在正确的位置。您应该能够将其部署到服务器并使其工作。

+0

这是一个可执行的JAR。我上面发布的是使用包含外部JAR的用户库,因为它们位于不同的位置,所以无法找到它们。如果我在我的机器上重新创建(或更改了用户库的路径)并创建可执行JAR,那么当我将其复制回原始服务器时,它听起来像可能起作用? – tacotime

+0

您必须将第三方JAR与您一起打包并将其部署到服务器上。我的建议是将所有这些文件放到一个单一的目录中,ZIP,然后让类路径指向它们所在的目录。设置一个运行JAR并设置CLASSPATH的脚本,你将不会问题。 – duffymo