【问题标题】:Reuse maven properties in submodule without common parent在没有公共父级的子模块中重用 maven 属性
【发布时间】:2020-01-21 13:33:54
【问题描述】:

在maven多模块项目中,有一个子模块需要从外部父项目继承。因此它不能像其他子模块一样从父模块继承,并且那些不能继承该外部父模块(因此使外部项目成为整个层次结构的父模块不是一种选择)。

有没有办法消除此类模块与层次结构的其余部分之间的属性重复?

parentpom.xml

    <properties>
        <foo>bar</foo>
    </properties>

    <modules>
        <module>child</module>
        <module>stepchild</module>
    </modules>

childpom.xml

    <parent>
        <groupId>my</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <description>foo can be used: ${foo}</description>

stepchildpom.xml

    <parent>
        <groupId>external</groupId>
        <artifactId>parent</artifactId>
        <version>35</version>
        <relativePath/>
    </parent>
    <description>foo does not get substituted: ${foo}</description>

【问题讨论】:

  • 基于给定的继子,您混合了多模块构建和聚合器构建,因为您的继子没有正确使用它的父级,这通常是一个坏主意。问题出现了:你为什么需要不同父母的财产?听起来你父母有设计缺陷......
  • 附带说明:您的父 pom 和子 pom 之间存在循环依赖关系。这会创建一个整体,并可能导致几个问题,尤其是在针对现代开发技术(CI 等)时。我建议您将聚合与父级分开。
  • @khmarbaise,您要指出的区别 - 所有子模块都属于层次结构或没有 - 它是否记录在某处?究竟违反它的后果是什么?这个实现肯定是有缺陷的(因为它不起作用),但是有没有更好的(允许在不继承整个构建配置的情况下共享属性)?
  • @Amadán,我不确定我明白你的意思是什么循环依赖。另外,你指的是什么问题?
  • @OliverGondža 我假设孩子导入你的父母 pom。随着父导入子模块作为子模块,您将有一个循环依赖。这意味着没有办法分离那些让你最终得到一个大单体的模块。您可能会发现很难让 CI 服务器独立构建子模块,从而导致对单个子模块的更改超过必要的构建(+反馈)时间。此外,如果对一个子模块的更改破坏了您的构建,您最终也会停止对所有其他子模块的开发,因为损坏的子模块会阻止您构建整体。

标签: java maven dry maven-module


【解决方案1】:

除了上述 cmets 中其他用户发现的所有问题外,您还可以使用可重用文件“my.properties”设置属性,该文件包含 foo=bar

并添加到 maven:

<build>    
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-1</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>${basedir}/../project-parent/my.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
   </plugins>

【讨论】:

  • 那不能解决问题。而且它引入了不必要的复杂性。
猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多