如何禁用多模块maven项目中子模块中的某些强制执行器规则?

问题描述 投票:0回答:3

我在多模块 Maven 项目中使用 maven-enforcer 插件。假设我的项目结构如下

main
  - query
  - storage

我的

main
pom 中的执行器插件如下所示

<build>
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.0.0-M2</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <DependencyConvergence/>
                                <requireJavaVersion>
                                    <version>[1.8,)</version>
                                    <message>*** This project requires JDK 1.8/J2SE 8 or later. ***</message>
                                </requireJavaVersion>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
</builds>

在子模块(

query
)中,如果我需要禁用其中一个强制执行者规则(比如说
DependencyConvergence
),有人可以让我知道如何做到这一点吗?

Maven 版本 - 3.6.1

java maven java-8 maven-3 maven-enforcer-plugin
3个回答
2
投票

据我所知,您无法禁用单个强制执行器规则。

您可以将

enforcer.skip
设置为
true
- 这会禁用 所有 强制规则。

我在类似情况下做了什么:

我定义了自己的执行者规则,该规则继承自“官方”执行者规则。该强制执行者规则包含一个禁用它的开关。


2
投票

这也在 maven 邮件列表中得到了回答。

如果所有配置都是通过管理的,则类似于以下内容 插件管理部分;

<build><pluginManagement><plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.0.0-M2</version>
    <executions>
      <execution>
        <id>alpha</id>
        <phase></phase>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <DependencyConvergence/>
            <requireJavaVersion>
              <version>[1.8,)</version>
              <message>*** This project requires
JDK 1.8/J2SE 8 or later. ***</message>
            </requireJavaVersion>
          </rules>
          <fail>true</fail>
        </configuration>
      </execution>
      <execution>
        <id>bravo</id>
        <phase></phase>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <requireJavaVersion>
              <version>[1.8,)</version>
              <message>*** This project requires
JDK 1.8/J2SE 8 or later. ***</message>
            </requireJavaVersion>
          </rules>
          <fail>true</fail>
        </configuration>
      </execution>
    </executions>
  </plugin>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <executions>
      <execution>
        <id>alpha</id>
        <phase>validate</phase>
      </execution>
    </executions>
  </plugin>
</plugins></builds>

query/pom.xml

<build><plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <executions>
      <execution>
        <id>alpha</id>
        <phase></phase>
      </execution>
      <execution>
        <id>bravo</id>
        <phase>validate</phase>
      </execution>
    </executions>
  </plugin>
    </executions>
  </plugin>
</plugins></builds>

您也可以通过属性来完成此操作,并在查询中定义 布拉沃执行而不是阿尔法。我使用过类似的技术 使用 maven-surefire-plugin,我使用 a 定义插件版本 属性并在根/父 pom 中具有默认值,并且在一个 特定的子pom我定义了一个不同的万无一失的版本。所以这个 可能有用...

<build><pluginManagement><plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.0.0-M2</version>
    <executions>
      <execution>
        <id>alpha</id>
        <phase></phase>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <DependencyConvergence/>
            <requireJavaVersion>
              <version>[1.8,)</version>
              <message>*** This project requires
JDK 1.8/J2SE 8 or later. ***</message>
            </requireJavaVersion>
          </rules>
          <fail>true</fail>
        </configuration>
      </execution>
      <execution>
        <id>bravo</id>
        <phase></phase>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <requireJavaVersion>
              <version>[1.8,)</version>
              <message>*** This project requires
JDK 1.8/J2SE 8 or later. ***</message>
            </requireJavaVersion>
          </rules>
          <fail>true</fail>
        </configuration>
      </execution>
    </executions>
  </plugin>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <executions>
      <execution>
        <id>${which-enforcer-id}</id>
        <phase>validate</phase>
      </execution>
    </executions>
  </plugin>
</plugins></builds>
<properties>
  <which-enforcer-id>alpha</which-enforcer-id>
</properties>

query/pom.xml

<properties>
  <which-enforcer-id>bravo</which-enforcer-id>
</properties>

约翰


0
投票

您可以使用属性

enforcer.skipRules
禁用单个规则。作为命令行属性或子模块中的属性。

例如,您可以将以下属性放入子 pom 中以禁用规则 banTransitiveDependency,假设它是在父 pom 中配置的

<properties>
    <enforcer.skipRules>banTransitiveDependencies</enforcer.skipRules>
</properties>

参见 https://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html#rulestoskip

© www.soinside.com 2019 - 2024. All rights reserved.