我目前正在开发一个具有以下结构的多模块项目。
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.xml 和 lifecycle.xml 文件。我不明白如何将该文件结构应用于我的项目,因为它是一个多模块项目,其中每个模块都有单独的 src 目录。
(我正在使用maven 3)
答案 0 :(得分:7)
如果不编写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。