Java 创建maven父项目的最佳实践

Java 创建maven父项目的最佳实践,java,maven,Java,Maven,我开发了一个多模块项目,它是一种java web框架。 其中一个子模块是我为框架用户提供的父pom。此父级配置插件及其依赖项。 我的问题是,这个父pom必须引用其版本为${project.version}的同级模块,并且由于maven项目继承,${project.version}不是我想要的 举例来说,我的框架项目结构如下所示: my-framework/ |_pom.xml |_parent/ |_pom.xml |_server/ |_pom.xml |_ui/ |_pom.xm

我开发了一个多模块项目,它是一种java web框架。 其中一个子模块是我为框架用户提供的父pom。此父级配置插件及其依赖项。 我的问题是,这个父pom必须引用其版本为${project.version}的同级模块,并且由于maven项目继承,${project.version}不是我想要的

举例来说,我的框架项目结构如下所示:

my-framework/
|_pom.xml
|_parent/
  |_pom.xml
|_server/
  |_pom.xml
|_ui/
  |_pom.xml
<project
    ....
<!-- General information -->
<modelVersion>4.0.0</modelVersion>
<artifactId>my-framework-parent</artifactId>
<packaging>pom</packaging>

<parent>
    <groupId>my.framework</groupId>
    <artifactId>my-framework</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<properties>
    <my.framework.version>${project.version}</my.framework.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>my.framework</groupId>
            <artifactId>my-framework-server</artifactId>
            <version>${my.framework.version}</version>
        </dependency>
       <dependency>
            <groupId>my.framework</groupId>
            <artifactId>my-framework-ui</artifactId>
            <version>${my.framework.version}</version>
        </dependency>
    </dependencyManagement>
    ...
</project>
我的父母pom看起来像:

my-framework/
|_pom.xml
|_parent/
  |_pom.xml
|_server/
  |_pom.xml
|_ui/
  |_pom.xml
<project
    ....
<!-- General information -->
<modelVersion>4.0.0</modelVersion>
<artifactId>my-framework-parent</artifactId>
<packaging>pom</packaging>

<parent>
    <groupId>my.framework</groupId>
    <artifactId>my-framework</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<properties>
    <my.framework.version>${project.version}</my.framework.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>my.framework</groupId>
            <artifactId>my-framework-server</artifactId>
            <version>${my.framework.version}</version>
        </dependency>
       <dependency>
            <groupId>my.framework</groupId>
            <artifactId>my-framework-ui</artifactId>
            <version>${my.framework.version}</version>
        </dependency>
    </dependencyManagement>
    ...
</project>

我终于找到了一个解决方案,多亏了。
但是我不得不发布一个pull请求来支持pluginManagement部分。


因此,解决方案是在发布之前,通过这个插件修改我的父pom。因此,我可以设置我想要的版本,而不是使用${project.version}。

不确定我是否理解您的意思:您希望能够在版本
1.0.0-SNAPSHOT
中设置我的框架,在版本
1.0.1-SNAPSHOT
中设置我的框架父对象,我的框架服务器在
1.0.2-SNAPSHOT
中,我的框架用户界面在
1.0.3-SNAPSHOT
版本中?我个人认为这是一个坏主意,迟早会给您带来麻烦。不,我希望我的框架父级1.0.0-SNAPSHOT引用我的框架服务器1.0.0-SNAPSHOT和我的框架ui 1.0.0-SNAPSHOT。它们都是同一个多模块项目my framework的子模块。我的目标是,我的用户只需继承我的框架父项就可以获得正确的依赖项。嗯……我也不理解你的问题……基于你的问题,我假设与@hotzst相同……maven resources plugin/maven install plugin的描述听起来不对……但最好的是你能给出一个完整的示例(可能只有两个孩子和您的父母pom以及您想要分发的父母pom)…您不需要为自定义版本字符串定义属性,您可以使用
project.version
,如果不指定其他版本,该属性将传播到子模块。您只需在依赖项管理中定义它。如果我使用${project.version},则继承我的框架父项的用户项目将没有正确的依赖项。实际上,maven将在用户项目的上下文中解析${project.version}。因此,如果用户的项目版本为4.0.0,maven将尝试加载我的框架服务器4.0.0,而不是1.0.0-SNAPSHOT。