【问题标题】:Custom phases for a multi-module maven project多模块 Maven 项目的自定义阶段
【发布时间】:2013-04-09 05:52:33
【问题描述】:

我目前正在开发一个具有以下结构的多模块项目。

root
  -module A
  -module B

我要做的是在模块B(模块B依赖于模块A)编译后执行模块B(模块的主要方法)。但我需要使用自定义命令来执行此操作。

前-

mvn runb

我知道 exec maven 插件 可用于使用 maven 运行项目。我不明白的是如何在 Maven 中创建自定义命令(阶段)。有没有办法在不编写 maven 插件的情况下实现这一点?

我参考了各种指南,例如 https://community.jboss.org/wiki/CreatingACustomLifecycleInMaven 试图实现这一目标。但是他们需要在 src/resources/META-INF 下创建 components.xmllifecycle.xml 文件。我不明白如何将该文件结构应用于我的项目,因为它是一个多模块项目,其中每个模块都有单独的 src 目录。

(我使用的是 maven 3)

【问题讨论】:

  • 这听起来像是集成测试你需要的东西,它存在于 Maven 中。存在预集成测试生命周期阶段和集成测试生命周期阶段,因此您可以将 exec 插件绑定到该阶段并运行 mvn verify

标签: maven-3 multi-module


【解决方案1】:

如果不编写 Maven 插件,您将无法创建自定义生命周期。

如果不破解 Maven 本身,至少从 Maven 3.0.5 开始,不可能通过插件向 Maven 添加自定义阶段。在处理任何插件之前,这些阶段由 Maven 的核心从其配置中加载。

如果你真的一心想要使用一个命令来做你想做的事,那么编写插件是唯一的方法。在您的settings.xml 中添加一些pluginGroup mappings,这可以变得更简单(您可以指定mvn my:plugin 而不是mvn com.mygroupid:plugin)。

但是,如果您愿意在命令行上使用稍微冗长的语法,则可以通过配置文件和exec maven plugin 来实现您想要的。


将配置文件添加到使用 exec 插件自行运行的模块 B。

类似这样的:

<project>
    ...
    <profiles>
        <!-- This profile uses local webapp security instead of the BlueCoat device, useful for testing -->
        <profile>
            <id>execb</id>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.2.1</version>

                        <executions>
                            <execution>
                                <id>runb</id>
                                <goals>
                                    <goal>java</goal>
                                </goals>
                                <phase>verify</phase> <!-- Anything after package phase -->
                                <configuration>
                                    <!-- Exec plugin configuration goes here -->
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

您需要根据运行 JAR 的方式配置 exec 插件,更多信息 here

它的作用是将 exec 插件作为模块 B 构建的一部分运行,但前提是激活了 execb 配置文件。


现在,当您只想构建项目(没有任何 exec)时,像平常一样构建(例如 mvn install)。

当你想构建和运行时,使用命令行:

mvn install -Pexecb

它会在构建过程中执行 exec。

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多