多模块maven项目的自定义阶段

Ish*_*iri 0 maven-3 multi-module

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

root
  -module A
  -module B
Run Code Online (Sandbox Code Playgroud)

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

前 -

mvn runb
Run Code Online (Sandbox Code Playgroud)

我知道exec maven插件可以用来运行maven项目.我不明白的是如何在maven中创建自定义命令(阶段).无论如何在没有编写maven插件的情况下实现这一目标?

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

(我正在使用maven 3)

pru*_*nge 8

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

并且没有攻击Maven本身,至少从Maven 3.0.5开始,不可能通过插件向Maven 添加自定义阶段.在处理任何插件之前,Maven的核心从其配置加载阶段.

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

但是如果您愿意在命令行上使用稍微冗长的语法,那么您可以通过配置文件和exec maven插件实现所需的功能.


向模块B添加一个配置文件,使用exec插件自行运行.

像这样的东西:

<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>
Run Code Online (Sandbox Code Playgroud)

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

这样做是运行exec插件作为模块B的构建的一部分,但仅在execb激活配置文件时.


现在,当你只想构建你的项目(没有任何exec)时,像普通(例如mvn install)一样构建.

如果要构建和运行,请使用命令行:

mvn install -Pexecb
Run Code Online (Sandbox Code Playgroud)

它将作为构建的一部分执行exec.