仅在父级中运行 Maven 插件

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

我创建了一个 Maven 插件来启动、清理和停止数据库。我的项目由一个包含 4 个模块的 pom 文件组成:

<modules>
    <module>infrastructure</module>
    <module>domain</module>
    <module>application</module>
    <module>presentation</module>
</modules>

插件只在这个pom中指定,而不是在模块的pom中指定。当我使用 cmd 启动数据库时:

mvn hsqldb:startdb

Maven 尝试为每个 pom 文件创建一个数据库。它实际上启动了 5 个数据库(一个用于父 pom,一个用于每个模块)。但是,我只想要一个(来自父 pom)。在我的父 pom 文件中,插件是这样声明的:

<plugin>
    <groupId>sample.plugin</groupId>
    <artifactId>hsqldb-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <inherited>false</inherited>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>
    <executions>
        ...
    </executions>
    <configuration>
        ...
    </configuration>
</plugin>

我的问题有什么解决办法吗?

亲切的问候,

瓦勒

maven maven-plugin pom.xml
2个回答
26
投票

两种方式:

  • 在命令行上执行

    mvn hsqldb:startdb -N

    -N
    ,
    --non-recursive

    不要递归到子项目

    来源)或

  • @aggregator

    注释你的插件

    标记此 Mojo 以在多线程中运行 模块方式,即聚合构建 项目集列为 模块。

    来源

    虽然没有明确说明,但这意味着您的插件负责构建子模块,即子模块不会自动构建。

无论哪种方式,它都只会构建顶层项目,而不会分解为模块。 我不知道你可以在 pom 中配置它。


0
投票

对于下一个去那里的人来说,他们是pom级别的解决方案,就像这个stackoverflow命题中所说的那样:https://stackoverflow.com/a/46357305/2190096

您可以在第一个插件配置中使用

<inherited>false</inherited>
。所以它只会在父pom执行中运行。

<build>
    <plugins>
        <plugin>
            <groupId>com.test.plugin</groupId>
            <artifactId>first-maven-plugin</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <inherited>false</inherited>
            <execution>
                <id>execution1</id>
                <phase>initialize</phase>
                <goals>
                    <goal>doit</goal>
                </goals>
            </execution>
        </plugin>
        <plugin>
            <groupId>com.test.plugin2</groupId>
            <artifactId>second-maven-plugin</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <execution>
                <id>another</id>
                <phase>package</phase>
                <goals>
                    <goal>goforit</goal>
                </goals>
            </execution>
        </plugin>
    </plugins>
</build>
© www.soinside.com 2019 - 2024. All rights reserved.