如何访问maven多模块父java类?
How to access maven multi-module parent java classes?
在一个多模块的Maven项目中,父项目可以在其中实现java 类吗?如果是,那么我们如何在子项目中使用那些类(因为父项目被打包为pom)?
是的,可以。但是它们不会被构建(默认情况下),因为 <packaging>pom
创建一个 .pom
文件,没有 .jar
、.war
等
此外,这是 Maven 项目的一种绝对不寻常的方式 structure/configuration。我强烈建议在任何情况下都避免这种情况,因为这是针对 Maven 而不是与它一起工作。
还请记住,multi-module/aggregator 项目不是(必然)其子模块的父项目。如果其他模块将项目声明为 <parent>
,则该项目是父项目。这样的父级可以是一个聚合器,通常它实际上是一个,但不一定是一个。
另见 POM Reference, Inheritance v. Aggregation:
[...] You often see projects that are both parents and aggregators. [...] However, an aggregator project and a parent project are both POM projects, they are not one and the same and should not be confused. A POM project may be inherited from - but does not necessarily have - any modules that it aggregates. Conversely, a POM project may aggregate projects that do not inherit from it.
长话短说,有以下关系:
- Aggregator¹ (
<packaging>pom
) → (sub-)modules ... for, well, aggregate of (sub-)modules
- 父项目(
<packaging>pom¹|jar|war|...
)←子项目...继承(从父到子的POM配置)
多模块项目中的父项目不应包含任何源代码。
源代码属于模块。
如果您需要共享源代码,请编写一个 common
模块并将其用作其他模块的依赖项。
在一个多模块的Maven项目中,父项目可以在其中实现java 类吗?如果是,那么我们如何在子项目中使用那些类(因为父项目被打包为pom)?
是的,可以。但是它们不会被构建(默认情况下),因为 <packaging>pom
创建一个 .pom
文件,没有 .jar
、.war
等
此外,这是 Maven 项目的一种绝对不寻常的方式 structure/configuration。我强烈建议在任何情况下都避免这种情况,因为这是针对 Maven 而不是与它一起工作。
还请记住,multi-module/aggregator 项目不是(必然)其子模块的父项目。如果其他模块将项目声明为 <parent>
,则该项目是父项目。这样的父级可以是一个聚合器,通常它实际上是一个,但不一定是一个。
另见 POM Reference, Inheritance v. Aggregation:
[...] You often see projects that are both parents and aggregators. [...] However, an aggregator project and a parent project are both POM projects, they are not one and the same and should not be confused. A POM project may be inherited from - but does not necessarily have - any modules that it aggregates. Conversely, a POM project may aggregate projects that do not inherit from it.
长话短说,有以下关系:
- Aggregator¹ (
<packaging>pom
) → (sub-)modules ... for, well, aggregate of (sub-)modules - 父项目(
<packaging>pom¹|jar|war|...
)←子项目...继承(从父到子的POM配置)
多模块项目中的父项目不应包含任何源代码。
源代码属于模块。
如果您需要共享源代码,请编写一个 common
模块并将其用作其他模块的依赖项。