将引用的Eclipse项目添加到Maven依赖项

时间:2008-09-25 21:42:06

标签: java eclipse maven-2

现在,我有两个Eclipse项目 - 他们都使用Maven 2来实现他们所有的jar依赖性。

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

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

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

我想知道是否有针对此类问题的标准解决方法 - 看起来它会相当普遍,我只是缺少一些关于Maven如何工作的基本知识。

7 个答案:

答案 0 :(得分:19)

也许您正在通过Eclipse configure->引用其他项目。仅构建路径。只要您使用Eclipse构建项目,这就可以工作。

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

那应该有用!。

答案 1 :(得分:9)

查看m2eclipse插件。当您更改pom时,它将自动并动态更新项目构建路径。无需运行mvn eclipse:eclipse

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

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

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

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

答案 2 :(得分:2)

您可能想尝试一种替代方法,在这种方法中,您有一个父maven项目和两个子项目。让我们说:

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

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

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

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

答案 3 :(得分:2)

我只需要这样做,我需要使用外部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. 然后在弹出窗口中单击“确定”。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

后更改了构建路径

答案 6 :(得分:0)

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

我们有一个“共同项目”(在任何地方使用),由于我们通过源代码控制标记它,因此不一定需要进行版本控制。所以

  • 保持固定版本或
  • 使用特殊LATEST版本
  • 引用它

总是安全起见是很好的解决方法。