25

现在,我有两个 Eclipse 项目——它们都使用 Maven 2 来实现对 jar 的依赖。

在 Eclipse 中,我将项目 Foo 包含在项目 Bar 的构建路径中,这样我就可以使用项目 Bar 中的 Foo 类。这在 Eclipse 领域非常有效,但是当我尝试时:

mvn compile 

在 Bar 的目录中,它失败了,因为 Maven 不知道 Eclipse 构建路径中的项目到项目关系。

如果我使用的是 Ant,我只会用它来做一些愚蠢的事情,比如将 foo.jar 复制到项目 Bar 的类路径中,但据我所知,在 Maven 领域做的事情要少得多。

我想知道这种类型的问题是否有标准的解决方法——它似乎相当普遍,我只是缺少一些关于 Maven 如何工作的基本知识。

4

7 回答 7

21

也许您仅通过 Eclipse 配置-> 构建路径引用了另一个项目。只要您使用 Eclipse 构建您的项目,它就可以工作。

尝试先mvn install在项目 Bar 中运行(以便将 Bar 放入您的 Maven 存储库中),然后将依赖项添加到 Foo 的 pom.xml 中。

那应该工作!

于 2008-09-25T21:48:54.533 回答
9

查看m2eclipse插件。当您更改 pom.xml 时,它将自动动态更新项目构建路径。没有必要运行mvn eclipse:eclipse

该插件还将检测是否有任何依赖项在同一个工作区中,并将该项目添加到构建路径中。

理想情况下,如果您使用 m2eclipse,您永远不会手动更改项目构建路径。您将始终编辑 pom.xml,这是正确的方法。

如前所述,Maven 不会知道 Eclipse 项目构建路径。您确实需要将所有依赖项添加到 pom 中,并且您需要确保首先通过运行构建和安装所有依赖项mvn install

如果您想使用单个命令构建两个项目,那么您可能会发现项目聚合很有趣。

于 2008-09-25T22:53:20.323 回答
3

我只需要这样做,我需要它来构建外部 mvn clean install 命令。这是在 Eclipse 中配置它的正确方法。(项目 B 作为 A 的依赖项)

  1. 在 Eclipse 中打开项目 A 的 pom.xml。
  2. 转到Dependencies选项卡。
  3. 单击Add...页面中间的按钮(用于左侧的依赖项框)
  4. 在弹出窗口中,一行下方应有一个框,其上方的文字为Enter groupId, artifactId or sha1 prefix or pattern (*):. 在此框中输入项目 B 的工件 ID。
  5. 双击要作为依赖项添加到此项目的 jar
    1. 之后您可能需要更新项目。
    2. 在包资源管理器中右键单击项目 A
    3. Maven -> 更新项目...
    4. 然后在弹出窗口中点击确定。
于 2017-10-18T19:38:07.547 回答
2

您可能想尝试另一种方法,您有一个父 maven 项目和两个子项目。比方说:

父级(pom.xml 引用了两个子项目/模块)--> A(取决于 B)--> B

那么当你从 Parent 的根目录运行 mvn eclipse:eclipse 时,maven 将为 A 和 B 生成 eclipse 项目,并且它将 B 作为 A 的类路径中的必需项目。

您可以从 Parent 的根目录运行 mvn install 来编译两个项目。

要完成设置,您必须将 A 和 B 都导入 Eclipse,确保没有选中“将项目复制到工作区”。

于 2008-09-26T03:03:55.367 回答
1

我认为处理它的最好方法是让 Bar 像 Foo 一样成为一个 Maven 项目,然后mvn install它可以在您的本地 Maven 存储库中使用。缺点是每次您希望 Maven 看到您对 Bar 所做的更改时都必须安装该项目。

于 2008-09-25T21:48:17.060 回答
1

不是一个完整的答案:
Bar 的 pom 需要包含 Foo 才能使用 maven 编译它。
我也对这个问题感兴趣,但从如何让 eclipse 识别 maven 添加的依赖项的角度来看,实际上是同一工作区中的另一个项目。我目前在执行后更改了构建路径mvn eclipse:eclipse

于 2008-09-25T21:50:25.230 回答
0

如果你引用了一个本地项目,但它的版本已经更新(通常会增加),它可能只能在你的本地 repo 中找到,你必须在你的 POM 中更新它的(可能是固定的)版本。


我们有一个“通用项目”(随处使用),它不一定需要版本控制,因为我们通过源代码控制对其进行标记。所以要么

  • 将其保持在固定版本或
  • 用特殊LATEST版本引用它

是始终保持安全的好方法。

于 2017-06-29T09:22:26.453 回答