2013-09-24 282 views
1

我是使用Maven构建项目的新手。我知道你在POM文件中声明了依赖关系,该文件概述了项目所需的jar,以便在编译时将它们添加到构建中。了解Maven依赖关系

我的问题是,如何在开发过程中工作,何时需要jar文件以开发应用程序?我认为Maven的观点是,你不必真的拥有jar文件,它会在构建时被获取并投入战争。但是如果我正在开发并且需要一个jar文件(比如说泽西岛),那么我仍然需要自己去抓取jar,并将其放在lib目录中,以便完成开发工作。我知道那个.jar中可以提供哪些类/方法?有人可以向我解释我缺少的东西吗?

我的导入语句引用球衣类将在编译时解决,因为现在他们被加下红线,因为该jar目前不存在?

回答

1

一旦你在Maven pom中指定了一个依赖项,那么它的maven负责下载它。记住Maven并不打扰你的代码是否依赖于该jar。 因此,在您的IDE创建Maven项目[不是简单的Java项目],添加所有你的POM的依赖,当你保存POM,所有的依赖关系将被下载。 如果依赖关系没有被下载,那么你需要检查你的maven settings.xml文件,其中存储库URL或凭据可能不正确。

也想广告建立部分细节。 Maven有很多插件可用,它可以帮助你将所有的依赖关系打包成war文件[assembly plugin]或rpm [maven rpm plugin]。这些插件会将所有的依赖关系和主jar包装到一个可部署的文件中。

+0

我认为这是我错过的关键,是当你保存pom文件时,罐子被下载。谢谢! – user1154644

+0

我的其他问题,如果我正在开发一台无法访问互联网的机器,这与maven更相关,有没有一种方法可以让NetBeans指向我的本地Maven存储库?现在,当我尝试使用netbeans创建Java Maven项目时,项目的创建失败,说'找不到前缀'原型的插件'..... – user1154644

+0

所有IDE中的项目始终指向本地存储库,但是您将需要网络访问才能将依赖关系下载到本地存储库。如果互联网无法正常工作,您也可以手动将jar放入本地存储库。只有当该jar版本在本地存储库中不存在时,Maven才会下载jar。 – Lokesh

1

你的假设或推定或概念是错误的。

让我们举一个例子。您正在创建一个新的Web应用程序项目

  1. 创建使用maven项目:原型
  2. 转换项目到eclipse兼容(IDE兼容的话)。这是通过执行一个命令完成的,并将所需的jar添加到类路径文件中,并且可以像平常一样开发应用程序。
  3. 构建和部署
+0

2)如果IDE直接支持Maven,则不需要(例如NetBeans) –

+0

同意。这是没有必要的,但或多或​​少需要做,因为没有人愿意在记事本或任何其他正常编辑器中开发代码。 –

+0

对我来说,这似乎很奇怪。我知道在构建/编译时,jar中的类的引用将被解析,但是如果我创建了一个类,导入了泽西类并开始使用类,那么编译器如何知道这些类,因为没有任何东西已被下载。 – user1154644

1

首先,与任何Java Maven项目,你将不得不选择选项“建立与依赖”,特别是如果你使用的是NetBeans。使用Eclipse,您可以选择“下载源”。完成之后,将会下载Maven依赖项(JAR文件)。

此外,你说你的导入语句将在编译时解决。这是在您点击'Build With Dependencies'选项(右键单击NetBeans中的Java Project)时完成的,因为它会下载所有的依赖关系并构建应用程序并解析任何使用pom.xml中的JAR库的导入。

+0

我明白了。我想我的误解是在构建之前,当我在Jersey jar文件中引用一个类时,Eclipse会知道我指的是什么? – user1154644

+0

它应该这样做。我也会确保安装正确的Eclipse Maven插件。 (它可以很容易地被遗忘!) – blackpanther