Maven模块必须是父项目的子目录吗?
我一直在研究Maven中的多模块项目,我只能找到作为父项目子目录存在的模块的示例。我是否会错误地推断,如果不将模块打包并部署到存储库,就无法在两个maven项目之间共享模块?那会让我觉得不必要的麻烦 例如,假设我正在积极地进行两个相关的项目,除了通过我正在进行的一个API桥接器(我计划用于未来的事情)之外,它们不会相互交谈。随着这两个项目的进展,大桥不断更新 所以,如果我想利用Maven模块来完成这项工作,一个项目pom.xml应该是这样的Maven模块必须是父项目的子目录吗?,maven,module,Maven,Module,我一直在研究Maven中的多模块项目,我只能找到作为父项目子目录存在的模块的示例。我是否会错误地推断,如果不将模块打包并部署到存储库,就无法在两个maven项目之间共享模块?那会让我觉得不必要的麻烦 例如,假设我正在积极地进行两个相关的项目,除了通过我正在进行的一个API桥接器(我计划用于未来的事情)之外,它们不会相互交谈。随着这两个项目的进展,大桥不断更新 所以,如果我想利用Maven模块来完成这项工作,一个项目pom.xml应该是这样的 <groupId>net.syndog&l
<groupId>net.syndog</groupId>
<artifactId>myproject</artifactId>
.
.
.
<modules>
<module>myproject-bridge</module>
</modules>
<groupId>net.syndog</groupId>
<artifactId>myotherproject</artifactId>
.
.
.
<modules>
<module>myproject-bridge</module>
</modules>
net.syndog
我的项目
.
.
.
myproject桥
…另一个看起来像这样
<groupId>net.syndog</groupId>
<artifactId>myproject</artifactId>
.
.
.
<modules>
<module>myproject-bridge</module>
</modules>
<groupId>net.syndog</groupId>
<artifactId>myotherproject</artifactId>
.
.
.
<modules>
<module>myproject-bridge</module>
</modules>
net.syndog
myotherproject
.
.
.
myproject桥
假设Maven中的模块必须是它们所属项目的子目录,myproject和myotherproject如何同时使用myproject桥接模块
这在Maven中是可能的,还是每次我对myproject bridge进行调整时都必须将其打包并部署到repo中?也许我错了,但这似乎是一个很平常的问题,但似乎没有人在谈论它。我这样做完全错了吗?根据我的知识,模块必须位于父项目的子目录中 要共享您的bridge projet,您必须将其部署到存储库中,以便其他两个项目可以依赖它 如果您正在使用Eclipse,此解决方案将使您受益匪浅
- 在您的工作区中有3个项目
- 确保所有项目都声明为Maven项目
- 对于这两个项目,将mybridge添加为依赖项
- 对于这两个项目,右键单击projet,然后选择Maven-->启用工作区解析
关于。使用这种依赖关系的通常方法是定义一种依赖关系,其结果是:
<dependency>
<groupId>net.syndog</groupId>
<artifactId>xyz-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
其中project-a和project-b通过一个简单的依赖关系使用myproject桥。在根目录中,通过
myproject桥
myproject-a
myproject-b
在myproject-a中,您只需定义
<dependency>
<groupId>net.syndog</groupId>
<artifactId>xyz-api</artifactId>
<version>${project.version}</version>
</dependency>
net.syndog
xyz api
${project.version}
在myproject-b中也是如此。
您必须知道,使用模块并不一定意味着定义依赖项。这也使您有机会在发布后或作为快照从一个完全不同的项目中使用myproject桥接器。中的文档: 要作为此项目的一部分构建的模块(有时称为子项目)。列出的每个模块都是包含该模块的目录的相对路径
如果我们认为问题是标题中的问题,那么问题是: Maven模块必须是父项目的子目录吗 只要问题是关于Maven多模块项目,而不是Maven继承的项目,那么这个问题的答案就是“不”,原因如下 如上所述,“列出的每个模块都是包含模块的目录的相对路径(添加了强调)。”只要它是从超级项目到子项目的相对路径(我避免使用术语“父”和“子”,以免涉及继承项目的无关概念),它就不必是子目录。可以通过多种方式满足此约束,这些方式可能依赖于操作系统。例如,您可以包括父目录路径元素(..)以遍历到子模块目录。或者,您可以使用符号链接。在任何情况下,不,Maven模块必须是Maven多模块项目目录的子目录这一点严格来说是不正确的