gpt4 book ai didi

java - 如何使一个 Maven 模块依赖于另一个模块?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:59 25 4
gpt4 key购买 nike

好的,我以为我了解如何使用 Maven...

我有一个主项目 M其中有子项目A , B , 和 C . C包含 A 所需的一些常用功能(主要是接口(interface))和 B .我可以运行 mvn compile jar:jar从项目根目录(M 目录)获取 JAR 文件 A.jar , B.jar , 和 C.jar . (所有这些工件的版本当前为 2.0-SNAPSHOT。)

师傅pom.xml文件在 M目录列表 C在其下<dependencyManagement>标签,所以 AB可以引用C通过仅包含一个引用,就像这样:

<dependency>
<groupId>my.project</groupId>
<artifactId>C</artifactId>
</dependency>

到目前为止,还不错。我可以运行 mvn compile从命令行,一切正常。但是当我在 NetBeans 中打开项目时,它会提示这个问题:“一些依赖项工件不在本地存储库中”,并且它说缺少的工件是 C .同样在命令行中,如果我更改为 AB目录并尝试运行 mvn compile我收到“构建错误:无法解析工件。”

我希望我可以手动转到我的 C.jar 所在的位置已构建并运行 mvn install:install-file ,但我宁愿找到一个解决方案,使我能够直接在 NetBeans 中工作(和/或在 Eclipse 中使用 m2eclipse)。

我做错了什么?

最佳答案

Maven 依赖于二进制依赖的概念,并通过本地存储库来解决它们。换句话说,如果它们之间存在依赖关系,则需要在本地存储库中“安装”包,编译和打包代码是不够的。为此,您需要运行 install(这将将包安装到本地存储库中,以用作本地其他项目的依赖项)。

旁注:您不应调用 mvn compile jar:jar ,而应调用 mvn package 。首先,运行 package 阶段将触发 package 之前的所有阶段(包括 compile )和 package 本身。其次,运行 package 将调用 jar:jarwar:war 等,具体取决于项目的 <packaging> 值(查看 introduction to the lifecycle 以获得更多详细信息)。这是 Maven 的一大优势:您不需要知道项目是 JAR、WAR、EJB 等,也不需要运行适当的目标来打包它。只需运行标准化的 package 阶段,Maven 就会完成这项工作(使用默认目标绑定(bind))。

那是针对 Maven 理论部分的。在 IDE 内部,为了更方便地使用 Maven,事情可能会略有不同。 IDE 可以使用项目依赖项(即对 IDE 内部代码的依赖项)而不是二进制依赖项,以便在一个项目中所做的更改在其他模块中可见,而无需运行 mvn install . Eclipse + M2Eclipse 就是这种情况。这也适用于以下条件下的 NetBeans(请参阅 Dependency Management ):

Hint: If you open a project that other projects depend on, the icon in other projects changes to a "maven project" icon to denote that the IDE knows about link between the projects. However such a link is only established when the groupId, artifactId and version all match in the dependency and project declaration. Frequently occurring problem is that you change an API signature in your library project, but the application is not picking up. Often it's caused by the fact that the application is using an older version of the library artifact. The artifact icon can help you track down these problems.

关于java - 如何使一个 Maven 模块依赖于另一个模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com