现在,我有两个Eclipse项目 - 他们都使用Maven 2来实现他们所有的jar依赖性。
在Eclipse中,我将项目Foo包含在项目Bar的构建路径中,以便我可以使用项目Bar中的Foo类。这在Eclipse领域非常有效,但是当我尝试时:
mvn compile
在Bar的目录中,它失败了,因为Maven不知道Eclipse的构建路径中的项目到项目的关系。
如果我使用Ant,我会用它来做一些愚蠢的事情,比如复制foo.jar到项目Bar的类路径中,但据我所知,在Maven-land中,事情的执行情况要少得多。
我想知道是否有针对此类问题的标准解决方法 - 看起来它会相当普遍,我只是缺少一些关于Maven如何工作的基本知识。
答案 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的依赖)
Dependencies
标签。Add...
按钮(左侧依赖项框)Enter groupId, artifactId or sha1 prefix or pattern (*):
。在此框中输入项目B的工件ID。答案 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
版本总是安全起见是很好的解决方法。