Maven构建多模块项目
Maven build multi-module project
我最近在 Maven 项目领域学习越来越多,我想将它用于我想解决一段时间的想法。
这个问题是关于如何使用我将使用的结构有效地构建 Maven 项目。
我对结构的看法如下:
- MyProject
|
|_Frontend
| |
| |_Window
| | |_pom.xml
| |...
| |_pom.xml
|
|_Backend
| |
| |_Database
| | |_pom.xml
| |...
| |_pom.xml
|
|_pom.xml
其中 MyProject
是 Frontend
和 Backend
的父级。对于所有这些包装都将设置为 pom
。最后在 Frontend
和 Backend
中将是包含代码的项目,这里例如一个 Window
项目和一个 Database
项目(实际中当然会有更多而不仅仅是 Frontend
和 Backend
中的一个项目,这只是为了可视化)。来自 Frontend
的项目可能依赖于来自 Backend
.
的项目
我会在 MyProject
父 POM 中将 Frontend
和 Backend
设置为 <module>
,并将 Frontend
中的所有项目设置为 <module>
Frontend
POM 中的 s,Backend
的交易相同。然后我会在 Frontend
的 POM 的 <dependencyManagement>
元素中为 Backend
项目添加 <dependencies>
,这样我就可以在 Frontend
中添加所需的依赖项项目分开。 (对于这个例子,Main 将在 Window
项目中)
所以我的问题是:如何构建它才能将其用作程序?
我对 Maven 比较陌生,所以我不太了解整个构建理念。我得到了它的好处,因此我想使用它,但我不确定如何在这样的项目中实现我想要的。我在网上搜索了答案,但我可能措辞太差了,因为我找不到我需要的答案。因此,如果那里有适用于此的文章或答案,那么 link 也没关系,但是如果这里有人愿意花时间给我对这个特定问题的更深入的解释,我会'抱怨^^.
非常感谢您的回答。
你想的结构看起来很合理。我正在向您的图表添加一些详细信息:
+- myProject
+- pom.xml ... <packaging>pom, aggregator (<modules>) of frontend & backend
|
+- frontend
| +- pom.xml ... <parent>myProject, <packaging>pom, aggregator (<modules>) of window & ***
| |
| +- window
| | +- pom.xml ... <parent>frontend
| |
| +- ***
| +- pom.xml ... <parent>frontend
|
+- backend
+- pom.xml ... <parent>myProject, <packaging>pom, aggregator (<modules>) of database & ***
|
+- database
| +- pom.xml ... <parent>backend
|
+- ***
+- pom.xml ... <parent>backend
澄清一下,关于“MyProject
将是父 [...] 包装将设置为 pom
.”,请参阅POM Reference, Inheritance v. Aggregation and :
Long story short, there are the following relationships:
- Aggregator¹ (
<packaging>pom
) → (sub-)modules ... for, well, aggregation of (sub-)modules
- Parent project (
<packaging>pom¹|jar|war|...
) ← child project ... for inheritance (of POM configuration from the parent to the child)
因此,<packaging>pom
不是必需的,因为 MyProject
是父级,但因为它是一个聚合器。事实上,父项目对其子项目一无所知。只有子项目声明 <parent>...
.
创建一个打包为 pom 的 maven 项目,它是您的 parent 项目,例如parent
在 parent.
中创建文件夹 child1
创建一个 maven 项目并将其命名为 child1 当你点击 new maven project for child1
取消选中默认工作区位置并指向您在第 2 点创建的 child1 文件夹,然后
现在您可以将包装名称命名为 jar。
相同的逻辑为您的 war 创建另一个名为 child 的项目 2.
现在您已经创建了 3 个项目,一个是 parent,另一个是 child1 和 child 2. 现在转到 parent pom.xml提到模块。
child1
child2
您必须确保始终使用 jdk 作为您的 JRE 系统库。例如jdk1.8
当你使用打包方式 war 那么它可能会出现 failOnWebxml 问题,然后将你的构建配置 failonwebxml 添加为 false。
您必须始终添加您的 Maven 插件,否则您在生成 war.
时会遇到问题
现在您的多模块项目已准备就绪,您可以开始了。
生成 war 后,您可以部署在任何服务器中。
我最近在 Maven 项目领域学习越来越多,我想将它用于我想解决一段时间的想法。 这个问题是关于如何使用我将使用的结构有效地构建 Maven 项目。
我对结构的看法如下:
- MyProject
|
|_Frontend
| |
| |_Window
| | |_pom.xml
| |...
| |_pom.xml
|
|_Backend
| |
| |_Database
| | |_pom.xml
| |...
| |_pom.xml
|
|_pom.xml
其中 MyProject
是 Frontend
和 Backend
的父级。对于所有这些包装都将设置为 pom
。最后在 Frontend
和 Backend
中将是包含代码的项目,这里例如一个 Window
项目和一个 Database
项目(实际中当然会有更多而不仅仅是 Frontend
和 Backend
中的一个项目,这只是为了可视化)。来自 Frontend
的项目可能依赖于来自 Backend
.
我会在 MyProject
父 POM 中将 Frontend
和 Backend
设置为 <module>
,并将 Frontend
中的所有项目设置为 <module>
Frontend
POM 中的 s,Backend
的交易相同。然后我会在 Frontend
的 POM 的 <dependencyManagement>
元素中为 Backend
项目添加 <dependencies>
,这样我就可以在 Frontend
中添加所需的依赖项项目分开。 (对于这个例子,Main 将在 Window
项目中)
所以我的问题是:如何构建它才能将其用作程序?
我对 Maven 比较陌生,所以我不太了解整个构建理念。我得到了它的好处,因此我想使用它,但我不确定如何在这样的项目中实现我想要的。我在网上搜索了答案,但我可能措辞太差了,因为我找不到我需要的答案。因此,如果那里有适用于此的文章或答案,那么 link 也没关系,但是如果这里有人愿意花时间给我对这个特定问题的更深入的解释,我会'抱怨^^.
非常感谢您的回答。
你想的结构看起来很合理。我正在向您的图表添加一些详细信息:
+- myProject
+- pom.xml ... <packaging>pom, aggregator (<modules>) of frontend & backend
|
+- frontend
| +- pom.xml ... <parent>myProject, <packaging>pom, aggregator (<modules>) of window & ***
| |
| +- window
| | +- pom.xml ... <parent>frontend
| |
| +- ***
| +- pom.xml ... <parent>frontend
|
+- backend
+- pom.xml ... <parent>myProject, <packaging>pom, aggregator (<modules>) of database & ***
|
+- database
| +- pom.xml ... <parent>backend
|
+- ***
+- pom.xml ... <parent>backend
澄清一下,关于“MyProject
将是父 [...] 包装将设置为 pom
.”,请参阅POM Reference, Inheritance v. Aggregation and
Long story short, there are the following relationships:
- Aggregator¹ (
<packaging>pom
) → (sub-)modules ... for, well, aggregation of (sub-)modules- Parent project (
<packaging>pom¹|jar|war|...
) ← child project ... for inheritance (of POM configuration from the parent to the child)
因此,<packaging>pom
不是必需的,因为 MyProject
是父级,但因为它是一个聚合器。事实上,父项目对其子项目一无所知。只有子项目声明 <parent>...
.
创建一个打包为 pom 的 maven 项目,它是您的 parent 项目,例如parent
在 parent.
中创建文件夹 child1创建一个 maven 项目并将其命名为 child1 当你点击 new maven project for child1 取消选中默认工作区位置并指向您在第 2 点创建的 child1 文件夹,然后 现在您可以将包装名称命名为 jar。
相同的逻辑为您的 war 创建另一个名为 child 的项目 2.
现在您已经创建了 3 个项目,一个是 parent,另一个是 child1 和 child 2. 现在转到 parent pom.xml提到模块。
child1 child2您必须确保始终使用 jdk 作为您的 JRE 系统库。例如jdk1.8
当你使用打包方式 war 那么它可能会出现 failOnWebxml 问题,然后将你的构建配置 failonwebxml 添加为 false。
您必须始终添加您的 Maven 插件,否则您在生成 war.
时会遇到问题现在您的多模块项目已准备就绪,您可以开始了。
生成 war 后,您可以部署在任何服务器中。